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

时间:2011-05-15 21:13:17

标签: jquery ajax json object brackets

我有对象

    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)?

4 个答案:

答案 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)是多值的。这取决于服务器对这些有意义的解码。

更多详情:http://api.jquery.com/jQuery.param/