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 相关文章推荐
angularJS 中$scope方法使用指南
Feb 09 Javascript
在Ubuntu系统上安装Node.JS的教程
Oct 15 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
May 05 Javascript
Bootstrap CSS使用方法
Dec 23 Javascript
jQuery实现移动端Tab选项卡效果
Mar 15 Javascript
如何理解Vue的作用域插槽的实现原理
Aug 19 Javascript
分享vue里swiper的一些坑
Aug 30 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
Oct 08 Javascript
ES6 Symbol数据类型的应用实例分析
Jun 26 Javascript
基于vue实现圆形菜单栏组件
Jul 05 Javascript
使用vue实现通过变量动态拼接url
Jul 22 Javascript
基于vue+echarts数据可视化大屏展示的实现
Dec 25 Vue.js
浅析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实现的在线人员函数库
2008/04/09 PHP
PHP使用数组实现队列
2012/02/05 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
python迭代器实例简析
2014/09/25 Python
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
python类和函数中使用静态变量的方法
2015/05/09 Python
实例说明Python中比较运算符的使用
2015/05/13 Python
python3抓取中文网页的方法
2015/07/28 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
写自荐信的注意事项
2014/03/09 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL