我的代码在JQuery 1.3.2中运行良好,但在1.4.2中它似乎被打破了。它应该在帖子中得到的是这样的:
?pks=108;pks=107
我现在得到的是:
?pks[]=108;pks[]=107;
当我跟踪此代码时,JSON对象似乎没有问题,直到它进入.ajax。收到回复后,Firebug显示帖子是:
Parameters application/x-www-form-urlencoded
pks[] 108
pks[] 107
Source
pks%5B%5D=108&pks%5B%5D=107
这不是我在JQuery 1.3.2上得到的。那些额外的牙齿来自哪里?
答案 0 :(得分:8)
嵌套参数序列化的JQuery 1.4 released a change。从他们的网站:
jQuery 1.4在jQuery.param中添加了对嵌套param序列化的支持,使用了PHP推广的方法,并且得到了Ruby on Rails的支持。例如,{foo:[“bar”,“baz”]}将被序列化为“foo [] = bar& foo [] = baz”。
在jQuery 1.3中,{foo:[“bar”,“baz”]}被序列化为“foo = bar& foo = baz”。但是,使用这种方法无法对单元素阵列进行编码。如果您需要旧的行为,可以通过设置传统的Ajax设置(全局通过
jQuery.ajaxSettings.traditional
或通过传统标志逐个案例)将其重新打开。
[]
括号通常用于表示一个数组,这似乎是他们试图在这里使我更明显的东西(因为你的查询字符串可以被读取,看到一个值是正在被另一方覆盖。
修改强>: 我想你可能会按照他们的建议使用:
// Globally set it to use the old 1.3.* way of doing things.
jQuery.ajaxSettings.traditional = true;
// Enables the 1.3.* way for a single Ajax request only
$.ajax({ data: stuff, traditional: true });