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 相关文章推荐
js Array操作的最简短最容易理解方法
Dec 09 Javascript
详解JavaScript编程中的数组结构
Oct 24 Javascript
json的使用小结
Jun 08 Javascript
完美解决IE不支持Data.parse()的问题
Nov 24 Javascript
Javascript实现信息滚动效果
May 18 Javascript
vue-router路由参数刷新消失的问题解决方法
Jun 17 Javascript
webpack3之loader全解析
Oct 26 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 Javascript
解决Layui中templet中a的onclick参数传递的问题
Sep 20 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
Nov 04 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
Jan 08 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
Oct 22 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
PHP连接Access数据库的方法小结
2013/06/20 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
vue组件中使用props传递数据的实例详解
2018/04/08 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
Python迭代用法实例教程
2014/09/08 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
python实现图片压缩代码实例
2019/08/12 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
python lambda的使用详解
2021/02/26 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
儿科护理实习自我鉴定
2013/09/19 职场文书
端午节活动总结
2014/08/26 职场文书
经济纠纷起诉状
2015/05/20 职场文书
培养联系人考察意见
2015/06/01 职场文书
收入证明范本
2015/06/12 职场文书
红楼梦读书笔记
2015/06/25 职场文书
深入理解python协程
2021/06/15 Python
Golang Web 框架Iris安装部署
2022/08/14 Python