这是一个有点咆哮,但也是一个非常严重的问题。 jQuery已经改变了ajax param序列化,如下所示:
你抓到了吗?jQuery 1.4在jQuery.param中添加了对嵌套param序列化的支持,使用了PHP推广的方法,并且得到了Ruby on Rails的支持。例如,{foo:[“bar”,“baz”]}将被序列化为“foo [] = bar& foo [] = baz”。
您调用参数foo
。如果foo的值是数组,jQuery现在将其重命名为foo[]
。这是因为一些PHP-ers和Rubyists希望第三方API为它们重命名。
称我为老式,但当我使用键x
将某些内容放入地图时,我希望找到x
下的值。或者至少使用可选覆盖来保持默认行为。
即使文档也同意我的意见:
如果value是一个数组,那么jQuery 用相同的序列化多个值 键即{foo:[“bar1”,“bar2”]} 成为'& foo = bar1& foo = bar2'。
我是否正确地认为这只是来自jQuery团队的错误判断?
答案 0 :(得分:8)
它实际上填补了一个主要的不一致性,如果你的反序列化程序知道约定并且很好地使用它。它使得一个单独的东西看起来与它自己的东西不同。
foo: "bar"
将"foo=bar"
地图映射到foo: "bar"
。foo: ["bar"]
将"foo=bar"
地图映射到foo: "bar"
。foo: ["bar", "baz"]
将"foo=bar&foo=baz"
地图映射到foo: ["bar", "baz"]
。foo: "bar"
将"foo=bar"
地图映射到foo: "bar"
。foo: ["bar"]
将"foo[]=bar"
地图映射到foo: ["bar"]
。foo: ["bar", "baz"]
将"foo[]=bar&foo[]=baz"
地图映射到foo: ["bar", "baz"]
。现在一切都很顺利,您不必担心接收数组数据或非数组数据,具体取决于数组中开始使用的元素数量。为了获得最大的优雅,foo: []
也应序列化为foo[]
(没有值的键),表示0-ary列表,但jQuery 1.4不会这样做。也许它应该。 :)
答案 1 :(得分:1)
我不同意。旧的惯例工作得很好,并继续适用于像Perl CGI.pm
这样的经典网络工作。我认为jQuery只是将一个工作惯例换成了另一个,我不知道任何一方的人都会很开心。