jQuery中通过ajax调用webservice传递数组参数的问题实例详解


Posted in Javascript onMay 20, 2016

下面通过实例给大家说明比较直观些,更方便大家了解。

本人的项目中通过jquery.ajax调用webservice.

客户端代码如下:

$.ajax({
url: "test/xxx.asmx",
type: 'POST',
dataType: 'xml',
timeout: ,
data: { name: "zhangsan", tags: ["aa", "bb", "cc"] },
error: function(xml) {
alert(xml.responseText);
},
success: function(xml) {
alert("OK");
}
});

服务端代码如下:

[WebMethod]
public XmlDocument xxx(string name, string [] tags )
{ 
return sth; 
}

总是抛出异常.

问题出现在这里:

下面是HTTP数据:

POST http://xxx.com/xxx.asmx/xxx HTTP/1.1
Host: center.cmis.htpc.com.cn
Connection: keep-alive
Content-Length: 55
Cache-Control: max-age=0
Origin: http://xxx.com
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: application/xml, text/xml, */*; q=0.01
Referer: http://xxx.com/xxx.aspx
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
name=zhangsan&tags%5B%5D=aa&tags%5B%5D=bb&tags%5B%5D=cc

而它期望的格式是如下的:

POST /xxx.asmx/xxx HTTP/1.1
Host: xxx.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
name=string&tags=string&tags=string

比较上面粗体,post的数据除了问题. 正确的应该如下:

name=zhangsan&tags=aa&tags=bb&tags=cc

看来问题出在jquery.ajax上面了.见代码(jquery.1.8.3.js)

function buildParams(prefix, obj, traditional, add) {
var name;
if (jQuery.isArray(obj)) { 
// Serialize array item.
jQuery.each(obj, function(i, v) {
if (traditional || rbracket.test(prefix)) { 
// Treat each array item as a scalar.
add(prefix, v);
} else {
// If array item is non-scalar (array or object), encode its
// numeric index to resolve deserialization ambiguity issues.
// Note that rack (as of ..) can't currently deserialize
// nested arrays properly, and attempting to do so may cause
// a server error. Possible fixes are to modify rack's
// deserialization algorithm or to provide an option or flag
// to force array serialization to be shallow.
//ytx 
buildParams(prefix, v, traditional, add);
//buildParams(prefix + "[" + (typeof v === "object" ? i : "") + "]", v, traditional, add);
}
});
} else if (!traditional && jQuery.type(obj) === "object") {
// Serialize object item.
for (name in obj) {
buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
}
} else {
// Serialize scalar item.
add(prefix, obj);
}
}

结论:

出问题的代码在22行,我修改成21行那样就行了.

不过,我对js/jquery都是一知半解的,希望不要引起别的后遗症,呵呵.

以上所述是小编给大家介绍的jQuery中通过ajax调用webservice传递数组参数的问题实例详解的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery 页面 Mask实现代码
Jan 09 Javascript
JQuery获取文本框中字符长度的代码
Sep 29 Javascript
JS判断数组中是否有重复值得三种实用方法
Aug 16 Javascript
javascript背景时钟实现方法
Jun 18 Javascript
模拟javascript中的sort排序(简单实例)
Aug 17 Javascript
vue-cli如何快速构建vue项目
Apr 26 Javascript
微信小程序 图片上传实例详解
May 05 Javascript
详解Angular 4 表单快速入门
Jun 05 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
Mar 07 Javascript
ng-repeat指令在迭代对象时的去重方法
Oct 02 Javascript
微信小程序获取用户openid的实现
Dec 24 Javascript
JavaScript组合继承详解
Nov 07 Javascript
浅析JavaScript Array和string的转换(推荐)
May 20 #Javascript
深入理解JS addLoadEvent函数
May 20 #Javascript
用jQuery获取table中行id和td值的实现代码
May 19 #Javascript
jquery遍历table的tr获取td的值实现方法
May 19 #Javascript
jquery if条件语句的写法
May 19 #Javascript
laypage分页控件使用实例详解
May 19 #Javascript
js多功能分页组件layPage使用方法详解
May 19 #Javascript
You might like
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
javascript编程起步(第七课)
2007/02/27 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
brook javascript框架介绍
2011/10/10 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
JS 创建对象的模式实例小结
2020/04/28 Javascript
Django 数据库同步操作技巧详解
2019/07/19 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
深入学习python多线程与GIL
2019/08/26 Python
简单了解django文件下载方式
2020/02/10 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
募捐倡议书
2014/04/14 职场文书
宣传普通话标语
2014/06/27 职场文书
道路施工安全责任书
2014/07/24 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
小学生读书笔记范文
2015/06/30 职场文书
教务处干事工作总结
2015/08/14 职场文书
课改心得体会范文
2016/01/25 职场文书
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫