在以json发送数据时,jQuery Form Data中的括号问题
我有这个对象
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)?
这个带有键中括号的符号在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
分别。
您还可以使用ajax调用中的traditional
设置http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings
传统类型:布尔值
如果您希望使用传统的param序列化样式,请将此属性设置为true。
例如:
$.ajax({ /*usual stuff */ traditional: true })
可以将具有相同键名的多个数据片段发送到脚本。 您可以通过在键名末尾添加方括号[]
来指定数据应解释为数组。
执行此操作的函数是jQuery.param
。 作为一个如何工作的例子:
$.param({ data: ['value3', 'value4'] });
data
是一个数组。 当它被序列化时,它被呈现为data%5B%5D=value3&data%5B%5D=value4
。 serverside脚本将其转换为数组。
这主要是一个命名约定 – 我认为从PHP – 表明密钥( key3
)是多值的。 由服务器来解决这些有意义的问题。
更多细节: http : //api.jquery.com/jQuery.param/