使用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代码
Sep 04 Javascript
JavaScript的Cookies
Jan 16 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
Jan 08 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
Jun 05 Javascript
js判断选择的时间是否大于今天的代码
Aug 20 Javascript
jquerymobile局部渲染的各种刷新方法小结
Mar 05 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
Dec 20 Javascript
JS实现的tab切换选项卡效果示例
Feb 28 Javascript
字太多用...代替的方法(两种)
Mar 15 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
Aug 27 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
Aug 03 Javascript
详解webpack的文件监听实现(热更新)
Sep 11 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
php5 mysql分页实例代码
2008/04/10 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
python实现数独算法实例
2015/06/09 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
2019/08/12 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
python3 kubernetes api的使用示例
2021/01/12 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
幼师自我鉴定范文
2013/10/01 职场文书
应用心理学个人的求职信
2013/12/08 职场文书
电子工程专业毕业生求职信
2014/03/14 职场文书
团代会闭幕词
2015/01/28 职场文书
小学校本教研总结
2015/08/13 职场文书
资产移交协议书
2016/03/24 职场文书
怎样写好工作计划
2019/04/10 职场文书
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技