将对象作为data
传递给ajax
时,我收到了一些意想不到的结果。出于某种原因,如果jQuery的值是数组,jQuery会在我的参数名称中添加方括号。例如......
var obj =
{
name: "John Doe",
courses: [ 1, 2, 4 ]
};
...变为name=John+Doe&courses[]=1&courses[]=2&courses[]=4
而不是name=John+Doe&courses=1&courses=2&courses=4
。
为什么jQuery添加方括号?
以下是一个工作示例:http://jsfiddle.net/BrHSy/
更新
我希望上面的示例生成一个类似于此示例中的查询字符串的字符串:
<html>
<head></head>
<body>
<form method="GET">
<input type="hidden" name="name" value="John Doe"/>
<input type="hidden" name="courses" value="1"/>
<input type="hidden" name="courses" value="2"/>
<input type="hidden" name="courses" value="4"/>
<button>Go!</button>
</form>
</body>
</html>
请注意,表单(www-form-urlencoded)生成的查询字符串没有方括号。
答案 0 :(得分:4)
我找到了自己的答案。当使用$.param
对数据进行编码时,jQuery看起来像jQuery,并不特别www-form-urlencode
数据。它正在序列化它。在jQuery 1.4之前,结果将如预期的那样。
然后,我的解决方案是通过传递true
:
$.param(obj, true);
这导致:name=John+Doe&courses=1&courses=2&courses=4
调用$.ajax()
时,可以将traditional
选项设置为true
,让jQuery以传统预期的方式对数据进行编码。似乎traditional
应该是默认值,因为jQuery的ajax
函数默认使用www-form-urlencode
内容类型。但是,当数据发送到服务器时,最终结果是格式错误的www-form-urlencode
'd数据块(根据HTML表单的一般处理方式,如果它们具有多个具有相同名称的输入)。 p>
此处更新了示例:http://jsfiddle.net/BrHSy/1/