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中的107个基础知识收集整理 推荐
Mar 29 Javascript
jQuery文件上传插件Uploadify使用指南
Jun 05 Javascript
使用原生JS实现弹出层特效
Dec 22 Javascript
angularjs学习笔记之完整的项目结构
Sep 26 Javascript
基于jQuery实现搜索关键字自动匹配功能
Mar 26 Javascript
JS实现物体带缓冲的间歇运动效果示例
Dec 22 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
Feb 13 Javascript
详谈表单重复提交的三种情况及解决方法
Aug 16 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
Sep 20 Javascript
js循环map 获取所有的key和value的实现代码(json)
May 09 Javascript
vue video和vue-video-player实现视频铺满教程
Oct 30 Javascript
在Angular项目使用socket.io实现通信的方法
Jan 05 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
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
学习YUI.Ext 第三天
2007/03/10 Javascript
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python交互式图形编程实例(二)
2017/11/17 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
Python 如何批量更新已安装的库
2020/05/26 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
塔吉特百货公司官网:Target
2017/04/27 全球购物
中学生在校期间的自我评价分享
2013/11/13 职场文书
海南地接欢迎词
2014/01/14 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
施工安全汇报材料
2014/08/17 职场文书
省委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
孙振耀退休感言
2015/08/01 职场文书