【问题标题】:Is jQuery 1.4's new behavior a bad design choice?jQuery 1.4 的新行为是一个糟糕的设计选择吗?
【发布时间】: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 团队的错误判断是否正确?

【问题讨论】:

    标签: jquery api-design


    【解决方案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 也是最糟糕的部分之一。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2011-08-01
    • 1970-01-01
    • 2021-04-28
    • 2011-05-09
    相关资源
    最近更新 更多