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实现单行文字间歇向上滚动源代码
Jun 02 Javascript
JS中的异常处理方法分享
Dec 22 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
Sep 24 Javascript
jQuery实现文档树效果
Feb 20 Javascript
AngularJS中$http的交互问题
Mar 29 Javascript
vue addRoutes实现动态权限路由菜单的示例
May 15 Javascript
Vue动态获取width的方法
Aug 22 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
Sep 05 jQuery
angular学习之动态创建表单的方法
Dec 07 Javascript
基于原生js实现九宫格算法代码实例
Jul 03 Javascript
使用vue引入maptalks地图及聚合效果的实现
Aug 10 Javascript
JavaScript实现简单动态表格
Dec 02 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将数据库导出成excel的方法
2010/05/07 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
深入浅出php socket编程
2015/05/13 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
jQuery 隔行换色 支持键盘上下键,按Enter选定值
2009/08/02 Javascript
JS 树形递归实例代码
2010/05/18 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
Python程序员开发中常犯的10个错误
2014/07/07 Python
用Python进行基础的函数式编程的教程
2015/03/31 Python
Python中with及contextlib的用法详解
2017/06/08 Python
用Eclipse写python程序
2018/02/10 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
物流专业大学生的自我鉴定
2013/11/13 职场文书
大学四年学习的自我评价分享
2013/12/09 职场文书
假释思想汇报范文
2014/10/11 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
欢迎词怎么写
2015/01/23 职场文书
电力安全学习心得体会
2016/01/18 职场文书