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 的新行为是一个糟糕的设计选择吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Javascript/JQuery/Rails 3 动态添加新行

动态表单的jQuery选择器

JQuery基础

第一章:基于面向对象的UML

使用 jQuery 将新行追加到表中 [重复]

jQuery UI 抖动效果从新行开始