Jquery ajax调用webservice总结

橘子红了呐 2017-11-14

Json ajax string jquery charset WebService cookie

转自原文 Jquery ajax调用webservice总结

jquery ajax调用webservice(C#)要注意的几个事项:

1、web.config里需要配置2个地方

<httpHandlers>
      <remove verb="*" path="*.asmx"/>
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </httpHandlers>
在<system.web></system.web>之间加入
<webServices>
      <protocols>
        <add name="HttpPost" />
        <add name="HttpGet" />
      </protocols>
    </webServices>

2.正确地编写webserivce的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/// <summary>
    /// UserValidate 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
     [System.Web.Script.Services.ScriptService]
    public class UserValidate : System.Web.Services.WebService
    {
        DFHon.Content.Common.rootPublic rp = new DFHon.Content.Common.rootPublic();
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string ValidateUserLogState()
        {
            string result = "";
            HttpCookie cookie = HttpContext.Current.Request.Cookies["DHFonMenberInfo"];
            if (cookie != null)
            {
                string username = System.Web.HttpUtility.UrlDecode(cookie["MenberName"]);
                int ipoint = 0;
                int gpoint = 0;
                try
                {
                    DataTable dt = UserBll.ExecuteUserAllInfo(username);
 
                    if (dt.Rows.Count > 0)
                    {
                        ipoint = int.Parse(dt.Rows[0]["iPoint"].ToString());
                        gpoint = int.Parse(dt.Rows[0]["gPoint"].ToString());
                    }
                }
                catch
                { }
                result = "{'user':{'id':'" + cookie["UserId"] + "','name':'" + username + "','message':'" + rp.getUserMsg(DFHon.Global.CurrentCookie.UserName) + "','ipoint':'" + ipoint.ToString() + "','gpoint':'" + gpoint.ToString() + "'}}";
            }
            else
            {
                result = "{'user':{'id':'0','name':'','message':'0','ipoint':'0','gpoint':'0'}}";
            }
            return result;
        }
 
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string UserLogin(string userName, string userPwd)
        {
            string returnVal = "";
            try
            {
                GlobalUserInfo info;
                DFHon.Content.UserLogin _UserLogin = new DFHon.Content.UserLogin();
                EnumLoginState state = _UserLogin.PersonLogin(HttpUtility.UrlDecode(userName), userPwd, out info);
                if (state == EnumLoginState.Succeed)
                {
                    DFHon.Global.CurrentCookie.Set(info);
                    DFHon.API.PDO.DiscuzNT.PassportLogin.UserLogin(Server.UrlDecode(userName), userPwd, -1);
                    int ipoint = 0;
                    int gpoint = 0;
                    DataTable dt = UserBll.ExecuteUserAllInfo(userName);
 
                    if (dt.Rows.Count > 0)
                    {
                        ipoint = int.Parse(dt.Rows[0]["iPoint"].ToString());
                        gpoint = int.Parse(dt.Rows[0]["gPoint"].ToString());
                    }
                    returnVal = "{'user':{'id':'" + info.UserId.ToString() + "','name':'" + info.UserName + "','message':'" + rp.getUserMsg(userName) + "','ipoint':'" + ipoint.ToString() + "','gpoint':'" + gpoint.ToString() + "'}}";
                }
                else
                {
                    int ids = 0;//状态:-2用户被锁定 -1用户名密码错误
                    switch (state)
                    {
                        case EnumLoginState.Err_Locked:
                            ids = -2;
                            break;
                        case EnumLoginState.Err_UserNameOrPwdError:
                            ids = -1;
                            break;
                        default:
                            break;
                    }
                    returnVal = "{'user':{'id':'" + ids + "','name':'','message':'0','ipoint':'0','gpoint':'0'}}";
                }
            }
            catch
            {
                returnVal = "{'user':{'id':'0','name':'','message':'0','ipoint':'0','gpoint':'0'}}";
            }
            return returnVal;
        }
        [WebMethod]
        public string UserLogout()
        {
            if (HttpContext.Current.Request.Cookies["DHFonMenberInfo"] != null)
            {
                HttpCookie cookie = new HttpCookie("DHFonMenberInfo");
                cookie.Expires = System.DateTime.Now.AddDays(-1);
                cookie.Domain = DFHon.Config.BaseConfig.getV("weblogin");
                HttpContext.Current.Response.AppendCookie(cookie);
            }
            return "1";
        }
        DFHon.Content.user UserBll = new DFHon.Content.user();
        [WebMethod]
        public string ValidateUserEmail(string email)
        {
            string result = "0";//返回的结果 -2邮箱为空 -1邮箱格式不正确 0邮箱存在 1填写正确
            if (string.IsNullOrEmpty(email))
            {
                result = "-2";//邮箱为空
            }
            else if (!IsValidEmail(email))
            {
                result = "-1";//邮箱格式不正确
            }
            else if (UserBll.sel_useremail(email) > 0)
            {
                result = "0";//邮箱存在
            }
            else
            {
                result = "1";//可以注册
            }
            return result;
        }
 
        [WebMethod]
        public string ValidateUserName(string username)
        {
            string result = "0";//返回值:-1用户名长度为2-16;0用户名存在;1可以注册
            if (username == "" || username == null || username.Length < 2 || username.Length > 16)
            {
                result = "-1";
            }
            else if (UserBll.sel_username(username) != 0)
            {
                result = "0";
            }
            else
            {
                result = "1";
            }
            return result;
        }
 
        public bool IsValidEmail(string strIn)
        // Return true if strIn is in valid e-mail format.
            return System.Text.RegularExpressions.Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
        }
    }

 3、前台JQuery代码

复制代码
<script>
        $(function() {
            $("#userloging").show();
            //登录框处理开始
            //加载登录状态
            $.ajax({
                type: "POST", //访问WebService使用Post方式请求
                contentType: "application/json;charset=utf-8", //WebService 会返回Json类型
                url: "/API/Service/UserValidate.asmx/ValidateUserLogState", //调用WebService
                data: "{}", //Email参数
                dataType: 'json',
                beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); },
                error: function(x, e) { },
                success: function(response) { //回调函数,result,返回值
                    $("#userloging").hide();
                    var json = eval('(' + response.d + ')');
                    var userid = json.user.id;
                    if (userid > 0) {
                        $("#spanusername").html(json.user.name);
                        $("#spanmessagenum").html(json.user.message);
                        $("#userloginsucced").show();
                        $("#userloginbox").hide();
                    }
                }
            });
            //登录
            $("#userlogbutton").click(function() {
               
                var username = $("#username").val();
                var userpwd = $("#userpassword").val();
                if (username != "" && userpwd != "") {
                    $("#userloging").show();
                    $.ajax({
                        type: "POST", //访问WebService使用Post方式请求
                        contentType: "application/json;charset=utf-8", //WebService 会返回Json类型
                        url: "/API/Service/UserValidate.asmx/UserLogin", //调用WebService
                        data: "{userName:'" + username + "',userPwd:'" + userpwd + "'}", //Email参数
                        dataType: 'json',
                        beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); },
                        error: function(x, e) {
                        },
                        success: function(result) { //回调函数,result,返回值
                            $("#userloging").hide();
                            var json = eval('(' + result.d + ')');
                            var userid = json.user.id;
                            if (userid > 0) {
                                $("#spanusername").html(json.user.name);
                                $("#spanmessagenum").html(json.user.message);
                                $("#userloginsucced").show();
                                $("#userloginbox").hide();
                            }
                            else {
                                switch (userid) {
                                    case -2:
                                        alert("用户被锁定!请30分钟后再登录!");
                                        $("#username").focus();
                                        break;
                                    case -1:
                                        alert("用户名或密码错误!请核对您的用户名和密码!");
                                        $("#userpassword").focus();
                                        break;
                                    default:
                                        alert("登录失败!请核对您的用户名和密码之后重试!");
                                        $("#userpassword").focus();
                                        break;
                                }
                            }
                        }
                    });
                }
                else if (username == "") {
                    alert("用户名不能为空!");
                    $("#username").focus();
                }
                else if (userpwd == "") {
                    alert("密码不能为空!");
                    $("#userpassword").focus();
                }
            });
            //退出
            $("#logout").click(function() {
                $("#userloging").show();
                $.ajax({
                    type: "POST", //访问WebService使用Post方式请求
                    contentType: "application/json;utf-8", //WebService 会返回Json类型
                    url: "/API/Service/UserValidate.asmx/UserLogout", //调用WebService
                    data: "{}", //Email参数
                    dataType: 'json',
                    beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); },
                    success: function(result) { //回调函数,result,返回值
                        $("#userloging").hide();
                        if (result.d > 0) {
                            $("#userloginsucced").hide();
                            $("#userloginbox").show();
                        }
                    }
                });

            }); //登录框处理结束

        });
        </script>
复制代码

 同时,Ajax的请求,可以参考 使用Jquery Ajax的webservice请求来实现更简练的Ajax。

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。


    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7168474.html,如需转载请自行联系原作者





登录 后评论
下一篇
云栖号资讯小编
27807人浏览
2020-07-13
相关推荐
各种AJAX方法的使用比较
891人浏览
2013-01-21 09:58:00
Jquery AJAX 调用WebService服务
892人浏览
2014-06-17 22:29:00
ASP.NET MVC AJAX的调用
851人浏览
2017-11-02 15:56:00
ASP.NET 使用Ajax
989人浏览
2017-11-23 23:51:00
jquery ajax json parsererror
627人浏览
2012-10-30 11:20:00
Jquery Ajax WebService
621人浏览
2009-08-24 16:39:00
Jquery Ajax WebService
554人浏览
2009-08-24 16:39:00
0
0
0
1484