0

这有点啰嗦,但也是一个非常严肃的问题。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 为他们重命名。

称我为老式的,但是当我用 key 将某些东西放入地图时x,我希望在x. 或者至少具有可选覆盖的默认行为。

甚至文档也同意我的观点:

如果 value 是一个数组,jQuery 使用相同的键序列化多个值,即 {foo:["bar1", "bar2"]} 变为 '&foo=bar1&foo=bar2'。

我是否认为这只是来自 jQuery 团队的错误判断?

4

2 回答 2

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 元列表,但 jQuery 1.4 没有这样做。也许应该。:)

于 2010-02-02T02:24:17.377 回答
1

我不同意。旧的约定工作得很好,并且对于像 Perl 的CGI.pm. 我认为 jQuery 只是将一种工作约定转换为另一种,而且我不知道任何一方的任何人都会那么高兴。

于 2010-02-02T02:30:43.093 回答