2013-08-03 12 views
5

の一部を送信しないので、私はこのコードを持っている:私はPOSTソースを検査する際AjaxのPOSTオブジェクト

var ajaxUrl = 'a/7776/as'; 
var data = { 
    'answer' : { 'user_input' : [] }, 
    'form_build_id' : 'form-ffe6f10e9601470ed4cfe38257a959a6' 
} 
$.ajax({ 
    url: ajaxUrl, 
    dataType: 'json', 
    type: 'POST', 
    data: data, 
    success: function(json){ 
    } 
    }); 

は、しかし答えが「送信されていないことが表示されます。..

ここでPOSTソースですFirebugの中で:

Parametersapplication/x-www-form-urlencoded 
form_build_id form-ffe6f10e9601470ed4cfe38257a959a6 
Source 
form_build_id=form-ffe6f10e9601470ed4cfe38257a959a6 

は、なぜこのようなケースであり、私はそれがまた、AJAXポストにオブジェクトの「答え」部分を送信する方法を得ることができますか?

答えて

0

T.J.クラウダー、はっきりと知識があります。実用的な答えに私のテイクです。私はHTTPトラフィックを調べ、上記のAJAXリクエストを実行しました。予想通り、answerは送信されませんでした。また、上記のアドレナリンの答えに沿って、Googleで "ajaxを空の配列を送信しない"を検索すると、これも問題であるという関連する結果の数だけ見ることができます。 user_inputが空の配列の場合は、代わりにnullを送信してください。私はそれを自分自身で試してみました。今度は、user_inputとともに、answerのパラメータがリクエストで送信され、次のコードでnullとして送信されたことがわかりました。

var userInput = []; //not sure where this is coming from in reality, but this is just an example. 

if (userInput.length == 0){ //in this example, this is obviously always true 
    userInput = null; 
} 
var ajaxUrl = 'a/7776/as'; 

var data = { 
    'answer' : { 'user_input' : userInput }, 
    'form_build_id' : 'form-ffe6f10e9601470ed4cfe38257a959a6' 
} 
$.ajax({ 
    url: ajaxUrl, 
    dataType: 'json', 
    type: 'POST', 
    data: data, 
    success: function(json){ 
    } 
}); 
0

ペイロードに配列が含まれるようにするには、traditionalをtrueに設定する必要があります。

$.ajax({ 
    url: ajaxUrl, 
    dataType: 'json', 
    type: 'POST', 
    data: data, 
    traditional: true, 
    success: function (json) {} 
}); 
+0

これはちょうど値として '' [object Object] ''を送信するようにします。ほとんど役に立ちません。 –

3

デフォルトPOSTエンコーディングはname=value対の平坦な一連の構成され、multipart/form-dataあります。

構造が複雑なため、name=valueペアのフラットシリーズに直接マップすることはできません。あなたはオブジェクトであるメンバを持っています。これは配列を参照するプロパティを持っています。

任意の複雑な構造を送信する場合は、別のエンコーディングを使用して、サーバーがそのエンコーディングを理解していることを確認する必要があります。たとえば、はサーバーにJSONまたはXMLを送信できますが、メソッドのcontentTypeプロパティを設定することで、そのことを伝える必要があります(に送信するデータのタイプを設定します)。)。その後、サーバーはそのJSONまたはXMLを逆シリアル化する方法を理解する必要があります。

構造が平らな一連のname=valueペアにマップできることを確認してください。

ハーフウェイハウスはmultipart/form-dataとしてデータを送信することですが、あなたは、単一のname=valueペアを送信し、value部分はこのように、異なるエンコーディングも持っている。ここで、単一のname=valueペアを送信

$.ajax({ 
    url: ajaxUrl, 
    dataType: 'json', 
    type: 'POST', 
    data: {json: JSON.stringify(data)}, 
    success: function(json){ 
    } 
}); 

jsonという名前で、値はJSONエンコードされた文字列です。あなたのサーバー側は通常の方法でjsonパラメータの値を取得し、JSONデシリアライザを使用してオブジェクトグラフを再作成します。

このハーフウェイハウス技術は、標準のリクエストエンコーディング以外のものを使用するのを困難にするフレームワークで便利なことがあります。

1

長さがゼロの配列を投稿することはできません。 POST(またはHTTPクエリー)キーは型情報を持ちません。長さ0の配列はPOST本体でヌルを効果的に構築します:message = []は ''にシリアライズします。

+1

これは元の質問に答えるので、誰でも落とした人は彼の動機を啓発することが期待されます。 – adrenalin

+0

+1元の質問はなぜ送信されていないのか、これが答えです。今これは必ずしもOPの問題を解決するわけではありませんが、それは質問に含まれていない要因に依存します。この知識によって、彼または彼女は少なくとも別の解決策を見つけることができます。 downvoteの説明はここで素晴らしいだろう... –