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


Posted in Javascript onAugust 04, 2016

在以往我们在做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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS中confirm,alert,prompt函数区别分析
Jan 17 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
May 20 Javascript
javascript操纵OGNL标签示例代码
Jun 16 Javascript
javascript表格的渲染组件
Jul 03 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
Sep 24 Javascript
一波JavaScript日期判断脚本分享
Mar 06 Javascript
BootStrap tab选项卡使用小结
Aug 09 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
May 26 Javascript
vue.js实现备忘录功能的方法
Jul 10 Javascript
vue组件实现弹出框点击显示隐藏效果
Oct 26 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
Aug 04 #Javascript
jQuery获取file控件中图片的宽高与大小
Aug 04 #Javascript
JS 数字转换为大写金额的简单实例
Aug 04 #Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 #Javascript
使用伪命名空间封装保护独自创建的对象方法
Aug 04 #Javascript
全面解析Angular中$Apply()及$Digest()的区别
Aug 04 #Javascript
window.open不被拦截的简单实现代码(推荐)
Aug 04 #Javascript
You might like
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
javascript 写类方式之九
2009/07/05 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
Jquery 实现弹出层插件
2015/01/28 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
python excel转换csv代码实例
2019/08/26 Python
python tornado使用流生成图片的例子
2019/11/18 Python
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
软件测试题目
2013/02/27 面试题
英语国培研修感言
2014/02/13 职场文书
开学季活动策划方案
2014/02/28 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
体育教师求职信
2014/06/30 职场文书
寒山寺导游词
2015/02/03 职场文书
财务人员岗位职责
2015/02/03 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle