0

これはちょっとした暴言ですが、非常に深刻な質問でもあります。jQuery は ajax パラメータのシリアル化を次のように変更しました。

jQuery 1.4 では、PHP で普及し、Ruby on Rails でサポートされているアプローチを使用して、jQuery.param でネストされたパラメーターのシリアル化のサポートが追加されています。たとえば、{foo: ["bar", "baz"]} は「foo[]=bar&foo[]=baz」としてシリアル化されます。

あなたはそれをキャッチしましたか?

パラメータを呼び出しますfoo。foo の値が配列の場合、jQuery はその名前をfoo[]背後に変更します。その理由は、一部の PHP 愛好家や Rubyist は、サード パーティの API が名前を変更することを期待しているためです。

古風な言い方をしますが、キーxで何かをマップに入れると、 の下に値が見つかると思いますx。または、少なくともオプションのオーバーライドを使用して、これをデフォルトの動作にします。

ドキュメントでさえ私に同意します:

値が配列の場合、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"]ます。

そして今、すべてがうまく往復し、最初に配列内にあった要素の数に応じて、配列データまたは非配列データを受け取ることを心配する必要はありません。エレガンスを最大限に高めるには、0-ary リストを示す (値のないキー) にfoo: []もシリアル化する必要がありfoo[]ますが、jQuery 1.4 はそれを行いません。多分それはすべきです。:)

于 2010-02-02T02:24:17.377 に答える
1

同意しません。古い慣習は問題なく機能し、Perl のCGI.pm. 私は、jQuery は単に 1 つの作業規則を別の規則に切り替えているだけだと思います。

于 2010-02-02T02:30:43.093 に答える