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 相关文章推荐
JavaScript游戏之优化篇
Nov 08 Javascript
JavaScript中的onerror事件概述及使用
Apr 01 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
Mar 05 Javascript
JavaScript常用标签和方法总结
Sep 01 Javascript
JavaScript编程中window的location与history对象详解
Oct 26 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
May 21 Javascript
VUE实现日历组件功能
Mar 13 Javascript
利用jQuery实现一个简单的表格上下翻页效果
Mar 14 Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 Javascript
微信小程序按钮去除边框线分享页面功能
Aug 27 Javascript
9102了,你还不会移动端真机调试吗
Mar 25 Javascript
js面向对象编程OOP及函数式编程FP区别
Jul 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脚本的10个技巧(7)
2006/10/09 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
解决jquery版本冲突的有效方法
2014/09/02 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
JavaScript实现全选取消效果
2017/12/14 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
Python打印斐波拉契数列实例
2015/07/07 Python
Python中的命令行参数解析工具之docopt详解
2017/03/27 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
Python 绘制可视化折线图
2020/07/22 Python
python 19个值得学习的编程技巧
2020/08/15 Python
详解移动端h5页面根据屏幕适配的四种方案
2020/04/15 HTML / CSS
美国在线家装零售商:Build.com
2016/09/02 全球购物
管理岗位竞聘演讲稿
2014/08/18 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
学生实习证明范文
2014/09/28 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
Ajax异步刷新功能及简单案例
2021/11/20 Javascript
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技