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 setTimeout和setInterval的使用方法 说明
Mar 25 Javascript
js DOM的学习笔记
Dec 22 Javascript
js实现点击图片改变页面背景图的方法
Feb 28 Javascript
JavaScript Sort 的一个错误用法示例
Mar 20 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
Jul 04 Javascript
Vue数据驱动模拟实现3
Jan 11 Javascript
js判断PC端与移动端跳转
Dec 24 Javascript
vue-music关于Player播放器组件详解
Nov 28 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
Aug 23 Javascript
使用xampp将angular项目运行在web服务器的教程
Sep 16 Javascript
微信小程序绘制半圆(弧形)进度条
Nov 18 Javascript
js实现简易计算器小功能
Nov 18 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
Smarty模板快速入门
2007/01/04 PHP
php mail to 配置详解
2014/01/16 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
两个php日期控制类实例
2014/12/09 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
浅析Python中yield关键词的作用与用法
2016/11/29 Python
python os用法总结
2018/06/08 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
高职教师岗位职责
2013/12/24 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
植树节口号
2014/06/21 职场文书
介绍长城的导游词
2015/01/30 职场文书
施工现场安全管理制度
2015/08/05 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫
python图像处理 PIL Image操作实例
2022/04/09 Python