案例说明:通过ajax将用户名和密码以json形式传递给服务器端,然后服务器端接受数据,进行处理返回json数据到前端

 

首先,在客户端,通过JavaScript脚本将页面表单数据封装成JSON格式。LoginAjax()函数完成了这一功能。然后我们通过ajax将数据发送到服务端的login.ashx。其中用到了JSON.stringify()方法,它可以将客户端发送的JSON数据对象进行序列化操作,详细的内容可以看这里https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

//通过ajax调用后台服务端程序,进行数据校验
function LoginAjax(accountName, password) {
    var httphtml;

    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari  
        httphtml = new XMLHttpRequest();
    } else {
        // code for IE6, IE5  
        httphtml = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (!httphtml) {
        alert("httphtml异常");
        returnfalse;
    }
    //将账户名和密码进行编码传递,放置数据乱码

    //方法一,通过问号传递
    // httphtml.open("POST", "Login.ashx?accountName=" + encodeURI(accountName) + "&password=" + encodeURI(password), false);
    var postData = { "accountName": accountName, "password": password };
    //异步 - True 或 False?
    httphtml.open("POST", "Login.ashx", true);
    httphtml.onreadystatechange = function () {

        /*
        存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
        0: 请求未初始化
        1: 服务器连接已建立
        2: 请求已接收
        3: 请求处理中
        4: 请求已完成,且响应已就绪
        */
        if (httphtml.readyState == 4) {
            /*
            200: "OK"
            404: 未找到页面
            */
            if (httphtml.status == 200) {
                //将ajax请求处理后返回的值显示出来
                var value = httphtml.responseText;
                //函数eval对json格式字符串进行反序列化操作。
                var obj = eval("(" + value + ")");
                if (obj.state == "1") {
                    alert(obj.msg);
                }
                else {
                    alert(obj.msg);
                }

            } else {
                alert("ajax请求错误!");
            }
        }

    }
    //有两种办法处理:第一种方式是   用来将对象序列化为JSON字符串(JSON.stringify()),

    //第二种方式是直接用双引号包裹起来,比如data: "{'accountName':'foovalue', 'password':'barvalue'}"。
    var data = JSON.stringify(postData);
    //将请求发送到服务器。参数string仅用于POST请求;
    httphtml.send(data);
}

Login.ashx服务端接收返回

 /// <summary>
    /// Login 的摘要说明
    /// 用户名默认   admin
    /// 密码默认    123456
    /// </summary>
    public class Login : IHttpHandler
    {
        
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            var data = context.Request;
            var sr = (new StreamReader(data.InputStream)).ReadToEnd();
            var javaScriptSerializer = new JavaScriptSerializer();
            User PostedData = javaScriptSerializer.Deserialize<User>(sr);

            string returnValue = "error";
            //校验用户名和密码是否为空
            if (!string.IsNullOrEmpty(PostedData.accountName) && !string.IsNullOrEmpty(PostedData.password))
            {
                //
                //备注:通过ajax传递参数进行编码方式乱码
                //将获取的值进行解码   
                string accountName = PostedData.accountName;// System.Web.HttpUtility.UrlDecode(context.Request["accountName"].ToString());
                string password = PostedData.password;// System.Web.HttpUtility.UrlDecode(context.Request["password"].ToString());
                if (!accountName.Equals("admin"))
                {
                    returnValue = "{\"state\":\"0\",\"msg\":\"账号不正确\"}"; //"账号不正确!";
                }
                else if (!password.Equals("123456"))
                {
                    returnValue = "{\"state\":\"0\",\"msg\":\"密码不正确\"}"; //"密码不正确";
                }
                else
                {
                    returnValue = "{\"state\":\"0\",\"msg\":\"恭喜你,登录成功\"}"; ;
                }
            }
            context.Response.Write(returnValue);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
    public class User {
        public string accountName { get; set; }
        public string password { get; set; }
    }

 

posted on 2016-08-18 15:08  高兴happy  阅读(3393)  评论(1编辑  收藏  举报