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 学习笔记 选择器之四
Jul 23 Javascript
Javascript 八进制转义字符(8进制)
Apr 08 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
May 17 Javascript
封装了一个支持匿名函数的Javascript事件监听器
Jun 05 Javascript
JQuery操作元素的css样式
Mar 09 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
Nov 05 Javascript
AngularJS $http模块POST请求实现
Apr 08 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
May 27 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
Dec 11 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 Javascript
详解Vue中的watch和computed
Nov 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实现的获取URL信息的类
2007/01/02 PHP
用PHP+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
javascript 函数调用规则
2009/08/26 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
怎么清空javascript数组
2013/05/11 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
Vue组件化开发思考
2018/02/02 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
python采用getopt解析命令行输入参数实例
2014/09/30 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python实现Sqlite将字段当做索引进行查询的方法
2016/07/21 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
python自定义时钟类、定时任务类
2021/02/22 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
Shell如何接收变量输入
2016/08/06 面试题
初一英语教学反思
2014/01/11 职场文书
鲜果饮品店创业计划书
2014/01/21 职场文书
高二化学教学反思
2014/01/30 职场文书
小学新教师培训方案
2014/02/03 职场文书
安全责任书范本
2014/04/15 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
体育教师求职信
2014/05/24 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python