您好,欢迎访问一九零五行业门户网

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

在以往我们在做ajax时,都要借助于一般处理程序(.ashx)或web服务(.asmx),并且每一个请求都要建一个这样的文件.这样建一大堆ashx文件,比较麻烦,多了看起来也不爽.
现在我们可以借助webmethod方法来使ajax实现起来更加简练
1,既然要用webmethod,那肯定就少不了引用一下命名空间了
using system.web.services;
在这里,为方便开发,我新建了一个页面专门用于写webmethod方法.那样会比较方便,也比较好管理. 如果ajax请求比较多,可以多建几个页面.根据页面的名称来作下请求的分类
例,下面贴出后台代码:
/// <summary> /// 根据任务id获取任务名称,任务完成状态,任务数量 /// </summary> /// <param name="id">任务id</param> /// <returns></returns> [webmethod] public static string getmissioninfobyid(int id) { commonservice commonservice = new commonservice(); datatable table = commonservice.getsysmissionbyid(id);   //..... return "false"; }
后台的这个webmethod方法要求是公共的静态方法,方法上面注意要加上wemethod属性;如果要在这个方法里面操作session.就得在方法上加上属性
[webmethod(enablesession = true)]//或[webmethod(true)] public static string getmissioninfobyid(int id) { commonservice commonservice = new commonservice(); datatable table = commonservice.getsysmissionbyid(id);   //..... return "false"; }
2.既然后台的webmethod方法都已经写好了.就差着调用了.这里就用jquery吧.比较简练
$.ajax({ type: "post", contenttype: "application/json", url: "webmethodajax.aspx/getmissioninfobyid", data: "{id:12}", datatype: "json", success: function()  {  //请求成功后的回调处理.  },  error:function() { //请求失败时的回调处理. } });
这里对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也是有效的),代码如下:
///<summary> ///jquery原型扩展,重新封装ajax请求webserveice ///</summary> ///<param name="url" type="string">处理请求的地址</param> ///<param name="datamap" type="string">参数,json格式的字符串</param> ///<param name="fnsuccess" type="function">请求成功后的回调函数</param> $.ajaxwebservice = function(url, datamap, fnsuccess) { $.ajax({ type: "post", contenttype: "application/json", url: url, data: datamap, datatype: "json", success: fnsuccess }); }
好了,这样我们请求webmethod方法 就可以这样调用了:
$.ajaxwebservice("webmethodajax.aspx/getmissioninfobyid", "{id:12}", function(result) {//......});
下面再贴一种封装,是以前跟一经理时,看的他的封装.觉得还不错
首先也是建一个js文件,文件名随你们起了.我这里就建了一个commonajax.js里面两个方法,看下面代码:
function json2str(o) { var arr = []; var fmt = function(s) { if (typeof s == 'object' && s != null) return json2str(s); return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s; } for (var i in o) arr.push("'" + i + "':" + fmt(o[i])); return '{' + arr.join(',') + '}'; } function invoke(url, param) { var result; $.ajax({ type: "post", url: url, async: false, data: json2str(param), contenttype: "application/json; charset=utf-8", datatype: "json", success: function(msg) { result = msg.d; }, error: function(r, s, e) { throw new error(); } }); return result; }
我们在前台的调用就比较简单了.
var result = invoke("webmethodajax.aspx/getmissioninfobyid", { "name": arguments.value, "id": id });
不过如果用这么方式的话.在给后台webmethod方法传参时要注意一点.json的key必须跟webmethod方法的形参一样,还有参数的顺序不可乱.否则会请求失败.
例如后台的方法如下:
[webmethod] public static string getmissioninfobyid(int id,string name) {  //.....  return "false"; }
我们要传两个参数,格式就按:
[csharp] view plain copy print? {"id":23,"name":"study"}
以上所述是小编给大家介绍的使用jquery ajax 请求webservice来实现更简练的ajax,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对的支持!
更多使用jquery ajax 请求webservice来实现更简练的ajax。
其它类似信息

推荐信息