我有一个物体
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)?
发布于 2011-05-16 05:19:38
键中带括号的这种表示法是在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
分别使用。
发布于 2014-01-08 23:58:11
您还可以在ajax调用http://api.jquery.com/jquery.ajax/#jQuery-ajax-settings中使用traditional
设置
传统类型:布尔型
如果您希望使用传统风格的参数序列化,请将其设置为true。
例如:
$.ajax({
/*usual stuff */
traditional: true
})
发布于 2011-05-16 05:22:49
可以将具有相同键名的多个数据片段发送到脚本。您可以通过在键名的末尾添加方括号[]
来指定应将数据解释为数组。
执行此操作的函数是jQuery.param
。作为其工作原理的一个示例:
$.param({
data: ['value3', 'value4']
});
data
是一个数组。当它被序列化时,它被呈现为data%5B%5D=value3&data%5B%5D=value4
。服务器端脚本会将其转换为数组。
https://stackoverflow.com/questions/6011284
复制相似问题