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 相关文章推荐
js可突破windows弹退效果代码
Aug 09 Javascript
表头固定(利用jquery实现原理介绍)
Nov 08 Javascript
js实现遮罩层划出效果是生成div而不是显示
Jul 29 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
Dec 29 Javascript
js确认框confirm()用法实例详解
Jan 07 Javascript
jquery html5 视频播放控制代码
Nov 06 Javascript
Jquery Easyui日历组件Calender使用详解(23)
Dec 18 Javascript
JS自定义函数实现时间戳转换成date的方法示例
Aug 27 Javascript
详解JavaScript中的强制类型转换
Apr 15 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
Jul 26 Javascript
基于JS实现操作成功之后自动跳转页面
Sep 25 Javascript
JavaScript实现表单验证功能
Dec 09 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下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
PHP准确取得服务器IP地址的方法
2015/06/02 PHP
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
python 获取文件列表(或是目录例表)
2009/03/25 Python
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
python批量处理文件或文件夹
2020/07/28 Python
Python 列表的清空方式
2020/01/13 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
python模拟实现分发扑克牌
2020/04/22 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
关于环保的建议书
2014/05/12 职场文书
公务员诚信承诺书
2014/05/26 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
铣工实训报告
2014/11/05 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
小马王观后感
2015/06/11 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫