Jquery ajax调用webservice总结

简介:

转自原文 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 ,如需转载请自行联系原作者





相关文章
|
前端开发 JavaScript
杨校老师课堂之基于Servlet整合JQuery中的Ajax进行表单提交[基于IDEA]
杨校老师课堂之基于Servlet整合JQuery中的Ajax进行表单提交[基于IDEA]
169 0
杨校老师课堂之基于Servlet整合JQuery中的Ajax进行表单提交[基于IDEA]
|
前端开发 JavaScript 数据处理
JQuery 拦截请求 | Ajax 请求拦截
【10月更文挑战第4天】
590 1
|
JSON 前端开发 JavaScript
jQuery AJAX 方法
jQuery AJAX 方法
130 1
|
JSON JavaScript 前端开发
Jquery常用操作汇总,dom操作,ajax请求
本文汇总了jQuery的一些常用操作,包括DOM元素的选择、添加、移除,表单操作,以及如何使用jQuery发送Ajax请求,涵盖了GET、POST请求和文件上传等常见场景。
|
JSON 前端开发 JavaScript
jQuery AJAX 方法
jQuery AJAX 方法
107 1
|
前端开发 JavaScript Java
SpringBoot+JQuery+Ajax实现表单数据传输和单文件或多文件的上传
关于如何在SpringBoot项目中结合JQuery和Ajax实现表单数据的传输以及单文件或多文件上传的教程。文章提供了完整的前后端示例代码,包括项目的`pom.xml`依赖配置、SpringBoot的启动类`App.java`、静态资源配置`ResourceConfig.java`、配置文件`application.yml`、前端HTML页面(单文件上传和多文件上传加表单内容)以及后端控制器`UserController.java`。文章最后展示了运行结果的截图。
766 0
SpringBoot+JQuery+Ajax实现表单数据传输和单文件或多文件的上传
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
168 5
|
XML JSON 前端开发
AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?
AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?
144 0
|
JavaScript 前端开发
Ajax的使用(jquery的下载)
这篇文章是关于Ajax学习笔记的分享,包括JQuery的下载方式、Ajax的主要参数说明,以及如何在网页中使用Ajax进行异步请求的示例代码。
|
JavaScript 前端开发 UED
精心挑选的12款优秀 jQuery Ajax 分页插件和教程
  在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示。Ajax 技术的出现使得 Web 项目的用户体验有了极大的提高,如今借助优秀的 jQuery 框架很容易实现各种基于 Ajax 技术实现的功能。
1265 0