jQuery中调用WebService方法小结


Posted in Javascript onMarch 28, 2011

个人感觉有两点是比较方便的:第一,在对WebService做ajax请求的时候,请求的url的写法是:服务地址/调用的方法名称,这样在请求的url中就确定了要调用的方法了,不必再在WebService代码中去判断ajax请求调用的是哪个方法了。第二,方法可以返回更多的数据类型,比如对象,泛型集合等;在ajax请求返回后,会自动将这些类型转换为json对象。而使用ashx的方式的话,需要先将这些类型转换为json格式的数据才能返回。

在使用jQuery调用WebService的方法的时候,只能发送post方式的请求;如果要返回json格式的数据的话,需要将contentType设置为application/json;返回的数据是以字母d为键值的json对象。
1.返回字符串类型

[WebMethod] 
public string HelloWorld() 
{ 
return "Hello World"; 
} $.ajax({ 
type: "post", 
contentType: "application/json", 
url: "UserService.asmx/HelloWorld", 
data: "{}", 
dataType: "json", 
success: function (result) { 
alert(result.d); 
} 
});

注意上面获取数据的方式:result.d,这是因为在返回的json数据格式是以d为键值的json对象。可以通过IE 9的开发人员工具,按下F12,选择网络,点击开始捕获按钮,重新刷新一下页面可以看到所有的请求列表,如下图所示:
jQuery中调用WebService方法小结
选择其中一个,点击转到详细视图,可以看到发送的请求以及响应的内容,如下图所示:
jQuery中调用WebService方法小结
根据这个相应正文的内容,我们可以看出为什么要使用result.d来获取返回的内容了。
2.返回对象类型
[WebMethod] 
public User GetUser() 
{ 
User user = new User() { Id = 1, UserName = "zhang san", Password = "123qwe" }; 
return user; 
} 
$.ajax({ 
type: "post", 
contentType: "application/json", 
url: "UserService.asmx/GetUser", 
data: "{}", 
dataType: "json", 
success: function (result) { 
alert(result.d.Id + " " + result.d.UserName); 
} 
});

3.返回泛型集合类型
[WebMethod] 
public List<User> GetUserList() 
{ 
List<User> list = new List<User>() 
{ 
new User{Id=1,UserName="zhang san",Password="asfasdf"}, 
new User{Id=2,UserName="li si",Password="3rwer"}, 
new User{Id=3,UserName="wang wu",Password="rqwe"} 
}; 
return list; 
} 
$.ajax({ 
type: "post", 
contentType: "application/json", 
url: "UserService.asmx/GetUserList", 
data: "{}", 
dataType: "json", 
success: function (result) { 
$.each(result.d, function (index, data) { 
alert(data.Id+" "+data.UserName); 
}); 
} 
});

对于泛型集合,对应的相应正文为:{"d":[{"__type":"WebServiceDemo.User","Id":1,"UserName":"zhang san","Password":"asfasdf"},{"__type":"WebServiceDemo.User","Id":2,"UserName":"li si","Password":"3rwer"},{"__type":"WebServiceDemo.User","Id":3,"UserName":"wang wu","Password":"rqwe"}]}。这时,result.d得到的是一个数组,通过each方法来遍历数组的每一项的属性值。
4.传递参数。在传递参数的时候,需要注意的是,ajax请求的参数的名称必须和WebService中的方法的名称一致,否则调用不能成功。
[WebMethod] 
public string Hello(string name) 
{ 
return "Hello " + name; 
} 
$.ajax({ 
type: "post", 
contentType: "application/json", 
url: "UserService.asmx/Hello", 
data: "{name:'admin'}", 
dataType: "json", 
success: function (result) { 
alert(result.d); 
} 
});
Javascript 相关文章推荐
javascript 用记忆函数快速计算递归函数
Mar 15 Javascript
关于JS中的方法是否加括号的问题
Jul 27 Javascript
探讨跨域请求资源的几种方式(总结)
Dec 02 Javascript
javascript中setAttribute兼容性用法分析
Dec 12 Javascript
详解数组Array.sort()排序的方法
May 09 Javascript
详谈AngularJs 控制器、数据绑定、作用域
Jul 09 Javascript
vue渲染时闪烁{{}}的问题及解决方法
Mar 28 Javascript
React Native中Mobx的使用方法详解
Dec 04 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
Apr 14 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
Nov 07 Javascript
详解如何解决使用JSON.stringify时遇到的循环引用问题
Mar 23 Javascript
JavaScript利用html5新方法操作元素类名详解
Nov 27 Javascript
利用jQuery接受和处理xml数据的代码(.net)
Mar 28 #Javascript
jquery.combobox中文api和例子,修复了上面的小bug
Mar 28 #Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
Sep 12 #Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
Mar 28 #Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
Mar 28 #Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
Mar 28 #Javascript
基于jquery的获取浏览器窗口大小的代码
Mar 28 #Javascript
You might like
教你如何把一篇文章按要求分段
2006/10/09 PHP
PHP下打开URL地址的几种方法小结
2010/05/16 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
python getpass实现密文实例详解
2019/09/24 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
烈士陵园观后感
2015/06/08 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js