18

私はオブジェクトを持っています

    var dataformdata={"key1":"value1","key2":"value2"};

次に、このように同じキー(key3)でさらに値を追加します

    dataformdata.key3 = [];
    dataformdata.key3.push("value3");
    dataformdata.key3.push("value4");

私はそれぞれの斜面で上記を行います。ブラウザコンソールのjQueryajax関数を介してdataformdataオブジェクトを送信する場合を除いて、すべて機能します。キーに角かっこがあることがわかります...

$.ajax({ type: "POST", url: "/", data: dataformdata,..。

これは私がブラウザコンソールに表示するものです:

key1:value1
key2:value2
key3%5B%5D:value3
key3%5B%5D:value4

jQuery.ajax()ドキュメントにそれが書かれているので、それはうまくいくはずです

オブジェクトはキー/値のペアである必要があります。値が配列の場合、jQueryは従来の設定の値に基づいて同じキーで複数の値をシリアル化します

しかし、なぜキーに角かっこ(%5B%5D)があるのでしょうか。

4

4 に答える 4

20

traditionalajax呼び出し の設定を使用することもできますhttp://api.jquery.com/jquery.ajax/#jQuery-ajax-settings

従来のタイプ:ブール

従来のスタイルのparamシリアル化を使用する場合は、これをtrueに設定します。

例えば:

$.ajax({
 /*usual stuff */
 traditional: true
})
于 2014-01-08T15:58:10.810 に答える
12

キーに角かっこが付いたこの表記は、多次元配列、またはオブジェクト(または他の配列)自体を含む配列を処理するためにjQuery1.4で導入されました。これは、デシリアライザーが配列とプリミティブ値を区別するのに役立ちます。たとえば、キーに角かっこがない場合、これら2つの変数は同じ方法でシリアル化されます。

var v1 = { "k1":"v1", "k2":"v2", "k3":["v3"] };

var v1 = { "k1":"v1", "k2":"v2", "k3":"v3" };

角かっこ表記では、次のようにエンコードされます

k1=v2&k2=v2&k3[]=v3

k1=v2&k2=v2&k3=v3

それぞれ。

于 2011-05-15T21:19:38.360 に答える
3

同じキー名を持つ複数のデータをスクリプトに送信することができます。これを行うには、キー名の末尾に角かっこ[]を追加して、データを配列として解釈する必要があることを指定します。

これを行う関数はですjQuery.param。これがどのように機能するかの例として:

$.param({
    data: ['value3', 'value4']
});

dataは配列です。シリアル化されると、としてレンダリングされdata%5B%5D=value3&data%5B%5D=value4ます。サーバーサイドスクリプトはこれを配列に変換します。

于 2011-05-15T21:22:48.770 に答える
2

これは主に、キー()が複数値であることを示す命名規則(PHPからだと思いますkey3)です。これらを意味のある形でデコードするのはサーバー次第です。

詳細:http ://api.jquery.com/jQuery.param/

于 2011-05-15T21:19:16.273 に答える