我有对象
var dataformdata={"key1":"value1","key2":"value2"};
然后我使用相同的键(key3)添加更多值,如此
dataformdata.key3 = [];
dataformdata.key3.push("value3");
dataformdata.key3.push("value4");
我在每个斜坡上做以上操作。这一切都有效,除非在浏览器控制台中通过jQuery ajax函数发送dataformdata对象时,我看到密钥中有括号...
$.ajax({
type: "POST",
url: "/",
data: dataformdata,
...
这是我在浏览器控制台中看到的:
key1:value1
key2:value2
key3%5B%5D:value3
key3%5B%5D:value4
它应该有效,因为在jQuery.ajax()文档中它说
对象必须是键/值对。如果value是一个数组,jQuery会根据传统设置的值
使用相同的键序列化多个值
但为什么键中的括号(%5B%5D)?
答案 0 :(得分:17)
您还可以使用ajax调用中的traditional
设置
http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings
传统类型:布尔
如果您想使用,请将此项设置为true 传统的param序列化风格。
例如:
$.ajax({
/*usual stuff */
traditional: true
})
答案 1 :(得分:12)
这个带有键中括号的符号在jQuery 1.4中引入,用于处理多维数组或包含对象(或其他数组)本身的数组。这有助于解串器区分数组和原始值。例如,如果键中没有括号,那么这两个变量将以相同的方式序列化:
var v1 = { "k1":"v1", "k2":"v2", "k3":["v3"] };
和
var v1 = { "k1":"v1", "k2":"v2", "k3":"v3" };
使用括号表示法,它们编码为
k1=v2&k2=v2&k3[]=v3
和
k1=v2&k2=v2&k3=v3
分别
答案 2 :(得分:3)
可以将具有相同键名的多个数据发送到脚本。您可以通过在键名的末尾添加方括号[]
来指定数据应该被解释为数组。
执行此操作的功能是jQuery.param
。以此为例:
$.param({
data: ['value3', 'value4']
});
data
是一个数组。序列化后,它将呈现为data%5B%5D=value3&data%5B%5D=value4
。 serverside脚本会将其转换为数组。
答案 3 :(得分:2)
这主要是一种命名约定 - 我认为从PHP开始 - 表明密钥(key3
)是多值的。这取决于服务器对这些有意义的解码。