jQuery 1.4的新行为是一个糟糕的设计选择吗?

时间:2010-02-02 02:04:55

标签: jquery api-design

这是一个有点咆哮,但也是一个非常严重的问题。 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团队的错误判断?

2 个答案:

答案 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只是将一个工作惯例换成了另一个,我不知道任何一方的人都会很开心。