使用Jquery Ajax的webservice请求来实现更简练的Ajax

虽然这篇技术文章很多地方都有转.但是我还是自己再转一下. 当学习笔记了.

 

在以往我们在做ajax时,都要借助于一般处理程序(.ashx)或web服务(.asmx),并且每一个请求都要建一个这样的文件.这样建一大堆ashx文件,比较麻烦,多了看起来也不爽.

现在我们可以借助webMethod方法来使ajax实现起来更加简练

 

1,既然要用WebMethod,那肯定就少不了引用一下命名空间了

using System.Web.Services;

在这里,为方便开发,我新建了一个页面专门用于写WebMethod方法.那样会比较方便,也比较好管理. 如果ajax请求比较多,可以多建几个页面.根据页面的名称来作下请求的分类

例,下面贴出后台代码:

[csharp]  view plain copy print ?
  1. /// <summary>  
  2. /// 根据任务ID获取任务名称,任务完成状态,任务数量  
  3. /// </summary>  
  4. /// <param name="id">任务ID</param>  
  5. /// <returns></returns>  
  6. [WebMethod]  
  7. public static string GetMissionInfoById(int id)  
  8. {  
  9.       CommonService commonService = new CommonService();  
  10.       DataTable table = commonService.GetSysMissionById(id);  
  11.     //.....  
  12.       return "false";  
  13. }  

 

后台的这个WebMethod方法要求是公共的静态方法,方法上面注意要加上WeMethod属性;如果要在这个方法里面操作Session.就得在方法上加上属性

[csharp]  view plain copy print ?
  1. [WebMethod(EnableSession = true)]//或[WebMethod(true)]  
  2. public static string GetMissionInfoById(int id)  
  3. {  
  4.       CommonService commonService = new CommonService();  
  5.       DataTable table = commonService.GetSysMissionById(id);  
  6.     //.....  
  7.       return "false";  
  8. }  

 

2.既然后台的WebMethod方法都已经写好了.就差着调用了.这里就用JQuery吧.比较简练

[javascript]  view plain copy print ?
  1. $.ajax({  
  2.      type: "POST",  
  3.      contentType: "application/json",  
  4.      url: "WebMethodAjax.aspx/GetMissionInfoById",  
  5.      data: "{id:12}",  
  6.      dataType: "json",  
  7.      success: function()  
  8.    {  
  9.      //请求成功后的回调处理.  
  10.    },  
  11.    error:function()  
  12.      {  
  13.         //请求失败时的回调处理.  
  14.      }  
  15. });  

 

这里对Jquery的Ajax几个参数做一下简单的说明,

type:请求的类型,这里必须用post 。WebMethod方法只接受post类型的请求

contentType:发送信息至服务器时内容编码类型。我们这里一定要用application/json

url:请求的服务器端处理程序的路径,格式为"文件名(含后缀)/方法名"

data:参数列表。注意,这里的参数一定要是json格式的字符串,记住是字符串格式,如:"{aa:11,bb:22,cc:33 , ...}"。

如果你写的不是字符串,那jquery会把它实序列化成字符串,那么在服务器端接受到的就不是json格式了,且不能为空,即使没有参数也要写成"{}",如上例。很多人不成功,原因就在这里。

dataType:服务器返回的数据类型。必须是json,其他的都无效。因为webservice 是一json格式返回数据的,其形式为:{"d":"......."}。  success:请求成功后的回调函数。你可以在这里对返回的数据做任意处理。

 

 

 

 

我们可以看到其中一些参数值是固定的,所以从复用性的角度考虑,我们可以给jquery做一个扩展,对上面的函数做一下简单的封装:我们建一个脚本文件叫jquery.extend.js。在里面写一个叫ajaxWebService的方法(因为webmethod其实就是WebService嘛,故此方法对请求*.asmx也是有效的),代码如下:

[javascript]  view plain copy print ?
  1. ///<summary>  
  2. ///jQuery原型扩展,重新封装Ajax请求WebServeice  
  3. ///</summary>  
  4. ///<param name="url" type="String">处理请求的地址</param>  
  5. ///<param name="dataMap" type="String">参数,json格式的字符串</param>  
  6. ///<param name="fnSuccess" type="Function">请求成功后的回调函数</param>  
  7. $.ajaxWebService = function(url, dataMap, fnSuccess) {  
  8.     $.ajax({  
  9.         type: "POST",  
  10.         contentType: "application/json",  
  11.         url: url,  
  12.         data: dataMap,  
  13.         dataType: "json",  
  14.         success: fnSuccess  
  15.     });  
  16. }  

好了,这样我们请求webmethod方法 就可以这样调用了:

[javascript]  view plain copy print ?
  1. $.ajaxWebService("WebMethodAjax.aspx/GetMissionInfoById""{id:12}"function(result) {//......});   

 

下面再贴一种封装,是以前跟一经理时,看的他的封装.觉得还不错

首先也是建一个js文件,文件名随你们起了.我这里就建了一个CommonAjax.js

里面两个方法,看下面代码:

[javascript]  view plain copy print ?
  1. function json2str(o) {  
  2.     var arr = [];  
  3.     var fmt = function(s) {  
  4.         if (typeof s == 'object' && s != nullreturn json2str(s);  
  5.         return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s;  
  6.     }  
  7.     for (var i in o) arr.push("'" + i + "':" + fmt(o[i]));  
  8.     return '{' + arr.join(',') + '}';  
  9. }  
  10.   
  11. function Invoke(url, param) {  
  12.     var result;  
  13.     $.ajax({  
  14.         type: "POST",  
  15.         url: url,  
  16.         async: false,  
  17.         data: json2str(param),  
  18.         contentType: "application/json; charset=utf-8",  
  19.         dataType: "json",  
  20.         success: function(msg) {  
  21.             result = msg.d;  
  22.         },  
  23.         error: function(r, s, e) {  
  24.             throw new Error();  
  25.         }  
  26.     });  
  27.     return result;  
  28. }  

 

我们在前台的调用就比较简单了.

[javascript]  view plain copy print ?
  1. var result = Invoke("WebMethodAjax.aspx/GetMissionInfoById", { "name": arguments.Value, "id": id });  

 

 不过如果用这么方式的话.在给后台WebMethod方法传参时要注意一点.Json的key必须跟WebMethod方法的形参一样,还有参数的顺序不可乱.否则会请求失败.

例如后台的方法如下:

[csharp]  view plain copy print ?
  1. [WebMethod]  
  2. public static string GetMissionInfoById(int Id,string name)  
  3. {  
  4.    //.....   
  5.      return "false";  
  6. }  

 

我们要传两个参数,格式就按: 

[csharp]  view plain copy print ?
  1. {"Id":23,"name":"study"}  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值