在以json发送数据时,jQuery Form Data中的括号问题

Han*_*ans 18 ajax jquery json brackets object

我有这个对象

    var dataformdata={"key1":"value1","key2":"value2"};
Run Code Online (Sandbox Code Playgroud)

然后我用这个相同的键(key3)添加更多的值

    dataformdata.key3 = [];
    dataformdata.key3.push("value3");
    dataformdata.key3.push("value4");
Run Code Online (Sandbox Code Playgroud)

我在每个斜坡做上面的事情.这一切都有效,除了在浏览器控制台中通过jQuery ajax函数发送dataformdata对象时,我看到键中有括号...

$.ajax({ type: "POST", url: "/", data: dataformdata,...

这是我在浏览器控制台中看到的:

key1:value1
key2:value2
key3%5B%5D:value3
key3%5B%5D:value4
Run Code Online (Sandbox Code Playgroud)

它应该工作,因为它在jQuery.ajax()文档中说

对象必须是键/值对.如果value是一个数组,jQuery会根据传统设置的值使用相同的键序列化多个值

但为什么键中的括号(%5B%5D)?

maa*_*zza 17

你也可以使用traditionalajax调用中的设置 http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings

传统类型:布尔值

如果您希望使用传统的param序列化样式,请将此属性设置为true.

例如:

$.ajax({
 /*usual stuff */
 traditional: true
})
Run Code Online (Sandbox Code Playgroud)


car*_*ira 12

这个带有键中括号的符号在jQuery 1.4中引入,用于处理多维数组或包含对象(或其他数组)本身的数组.这有助于解串器区分数组和原始值.例如,如果键中没有括号,那么这两个变量将以相同的方式序列化:

var v1 = { "k1":"v1", "k2":"v2", "k3":["v3"] };
Run Code Online (Sandbox Code Playgroud)

var v1 = { "k1":"v1", "k2":"v2", "k3":"v3" };
Run Code Online (Sandbox Code Playgroud)

使用括号表示法,它们被编码为

k1=v2&k2=v2&k3[]=v3
Run Code Online (Sandbox Code Playgroud)

k1=v2&k2=v2&k3=v3
Run Code Online (Sandbox Code Playgroud)

分别.

  • 谢谢你的解释.我发现我可以使用jQuery.param(dataformdata,true)删除括号,以执行传统的"浅"序列化. (7认同)