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 01 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
Dec 05 Javascript
AngularJS 实现按需异步加载实例代码
Oct 18 Javascript
jquery实现两边飘浮可关闭的对联广告
Nov 27 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
Dec 31 Javascript
Vue计算属性的学习笔记
Mar 22 Javascript
微信JS-SDK选取手机照片上传功能
Apr 21 Javascript
详解在AngularJS的controller外部直接获取$scope
Jun 02 Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
基于webpack4+vue-cli3项目实现换肤功能
Jul 17 Javascript
JavaScript如何使用插值实现图像渐变
Jun 28 Javascript
微信小程序picker组件两列关联使用方式
Oct 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
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
Python threading多线程编程实例
2014/09/18 Python
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
python识别验证码的思路及解决方案
2020/09/13 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
房地产开发计划书
2014/01/10 职场文书
中学生社会实践活动总结
2014/07/03 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
感谢信模板大全
2015/01/23 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
2015年维修工作总结
2015/04/25 职场文书
公司会议开幕词
2016/03/03 职场文书
导游词之襄阳古城
2019/09/27 职场文书
element多个表单校验的实现
2021/05/27 Javascript
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python