2016-05-11 7 views
0

非常にシンプルではありますが、これは奇妙なものです。jQuery Ajax配列が正しくシリアル化されません

コード:これはクロームネットワークインスペクタに巻き込まれ

var recipients = []; 
recipients.push(uuid1); 
recipients.push(uuid2); 

$.ajax({ 
    url: '/api-url/', 
    type: 'POST', 
    data: {'recipient': recipients, 'message': message, 'subject': subject}, 
    dataType: 'json' 
}) ... 

recipient[]:8b99fa41-0f8f-4882-b14f-dc258a765b15 
recipient[]:add61999-9baa-4096-a92f-fbb144a4a981 
subject:test 
message:testtest 

これは、サーバーに到着する:あなたが見ることができるように

{u'recipient[]': [u'8b99fa41-0f8f-4882-b14f-dc258a765b15', u'add61999-9baa-4096-a92f-fbb144a4a981'], u'message': [u'testtest'], u'subject': [u'test']} 

は、我々が持っていますajax呼び出しの「受信者」、ネットワーク・インスペクタの「recipient」の2つのインスタンス、およびcのあるサーバーの1つの「recipient []」インスタンスデータは正しいですが、間違ったパラメータ名です。

「受信者[]」の「[]」はどのようになっていますか?

+0

それはparamは配列を表す場合のparamに '[]'を追加するための標準です。いくつかのサーバー側言語/プラグインなどはこれを削除しますが、他のものは削除しません。あなたはそうでない人と働いているように見えます。あなたはjQueryの 'traditional'フラグを使いこなすか、自分でparam文字列を作るか、自分が持っているもので作業することができます。 –

答えて

2

これは、jQueryのは、あなたのデータオブジェクトに何をするかです:サーバーに送信する

データ。 がまだ文字列でない場合は、クエリ文字列に変換されます。これはGETリクエストのURLに追加されています。この自動処理を防止するには、 processDataオプションを参照してください。オブジェクトは キー/値のペアでなければなりません。値が配列の場合、jQueryは、従来の設定 (以下で説明します)の値に基づいて、同じキーを持つ複数の 値をシリアル化します。

JSONとして送信するには、JSON文字列に変換する必要があります。

... 
type: 'POST', 
data: JSON.stringify({'recipient': recipients, 'message': message, 'subject': subject}), 
+0

これは助けになりましたが、contentType: "application/json; charset = utf-8"とdataType: "json"をajax設定に追加するまでは助かりました。 – dnmh

+0

@dnmhはい、明示的にすることをお勧めします。 contentTypeヘッダーがないと、サーバーはURLエンコードされたパラメーターを期待しているようです。 – wero

関連する問題