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 相关文章推荐
jquery事件preventDefault()方法用法实例
Jan 16 Javascript
Angularjs基础知识及示例汇总
Jan 22 Javascript
JS+CSS实现可拖动的弹出提示框
Feb 16 Javascript
js实现两点之间画线的方法
May 12 Javascript
jQuery滚动加载图片实现原理
Dec 14 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
Apr 06 Javascript
jQuery动态加载css文件实现方法
Jun 15 Javascript
js 创建对象 经典模式全面了解
Aug 16 Javascript
Three.js中矩阵和向量的使用教程
Mar 19 Javascript
JavaScript实现选项卡效果的分析及步骤
Apr 16 Javascript
Vue+Openlayers自定义轨迹动画
Sep 24 Javascript
详解Vue的options
May 15 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 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
wxPython使用系统剪切板的方法
2015/06/16 Python
Python中字符串的处理技巧分享
2016/09/17 Python
python Flask实现restful api service
2017/12/04 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
解决Python一行输出不显示的问题
2018/12/03 Python
python对矩阵进行转置的2种处理方法
2019/07/17 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
自荐信格式技巧有哪些呢
2013/11/19 职场文书
传媒专业推荐信范文
2013/11/23 职场文书
导师工作推荐信
2015/03/27 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
python如何做代码性能分析
2021/04/26 Python
无线电通信名词解释
2022/02/18 无线电
Golang并发工具Singleflight
2022/05/06 Golang