jQuery 1.4 的新行为是一个糟糕的设计选择吗?
Posted
技术标签:
【中文标题】jQuery 1.4 的新行为是一个糟糕的设计选择吗?【英文标题】:Is jQuery 1.4's new behavior a bad design choice? 【发布时间】:2011-01-11 23:51:09 【问题描述】:这有点啰嗦,但也是一个非常严肃的问题。 jQuery 对 ajax 参数序列化做了如下改动:
jQuery 1.4 在 jQuery.param 中添加了对嵌套参数序列化的支持,使用 php 普及的方法,Ruby on Rails 支持。例如,foo: ["bar", "baz"] 将被序列化为“foo[]=bar&foo[]=baz”。
你听懂了吗?
你调用你的参数foo
。如果 foo 的值是一个数组,jQuery 现在会将它重命名为 foo[]
。这样做的原因是因为一些 PHP 开发者和 Ruby 开发者希望 3rd 方 API 为他们重命名。
称我为老式的,但是当我使用键 x
将某些内容放入地图时,我希望在 x
下找到值。或者至少让这个默认行为带有一个可选的覆盖。
即使是文档也同意我的观点:
如果 value 是一个数组,jQuery 序列化多个相同的值 键即 foo:["bar1", "bar2"] 变成'&foo=bar1&foo=bar2'。
我认为这只是 jQuery 团队的错误判断是否正确?
【问题讨论】:
【参考方案1】:它实际上填补了一个主要的不一致性,如果你的反序列化器知道这个约定并且可以很好地使用它。它使单一事物的数组看起来与单独事物不同。
旧:
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 元列表,但 jQuery 1.4 没有这样做。也许应该。 :)
【讨论】:
好的,这是一个真的的好点。尽管投票结束了这个问题,但我实际上在这里学到了一些其他人可以希望带走的东西。【参考方案2】:我不同意。旧的约定工作得很好,并且对于像 Perl 的CGI.pm
这样的经典网络主力继续工作得很好。我认为 jQuery 只是将一个工作约定转换为另一个,我不知道任何一方的任何人都会那么高兴。
【讨论】:
肯定 jQuery 正在转向的人(PHP 和 Ruby 开发人员,对于初学者)会很高兴吗? 我对 Perl 的喜爱已经够久了,我知道不仅 CGI.pm 的设计经常缺乏,param
也是最糟糕的部分之一。 :)以上是关于jQuery 1.4 的新行为是一个糟糕的设计选择吗?的主要内容,如果未能解决你的问题,请参考以下文章