2012-02-07 15 views
4

jQuery 1.7.1を使用しています。jQuery ajaxがオブジェクトをシリアル化しないのはなぜですか?

次のようにコードがあります:

var accountObject = new Object(); 
accountObject.account = new Object(); 
accountObject.account.sas = []; 

$.ajax({ 
    type: "PUT", 
    url: "https://stackoverflow.com/a/2", 
    data: accountObject, 
    dataType: "html", 
    success: function(msg) { 
     alert_user("Successfully saved the selected session attributes as defaults"); 
    }, 
    error: function(msg) { 
     alert_user(msg);    
    } 
}); 

問題が原因私は空の配列にaccountObject.account.sasを設定しているという事実に、dataがで完全に空に到着、ということだと私は、次の質問/問題を抱えていますサーバとして:

{}、それがされている必要があり

{ "account": { "sas": [] } } 

sasプロパティのエントリをaccountにすると、すべて問題ありません。私は、配列["1", "2", "3"]として、文字列「1」、「2」と「3」を入れた場合たとえば、私は、サーバーに乗る:なぜそうなのか

{ "account": { "sas": [ "1", "2", "3" ] } } 

誰もが知っていますか?事前 Panayotis

+3

'dataType:" html "、'? 'dataType:" json "' – Joe

+1

を試してください。@JoeTuskan: 'dataType'は、返されたデータだけに責任があり、必要です。 – jAndy

+1

'dataType'は無関係です。クエリパラメータの形式ではなく、期待される応答形式を制御します。 – Matt

答えて

2

問題は、空の配列をクエリ文字列で正しく表現できないことです。オブジェクト階層をdataに渡すと、jQueryはそれをクエリ文字列に変換しようとしますが、空の配列で何をするのか分かりません。

1.4.4が同じ階層を渡されるたびに空の文字列を返すように見えた理由は、クエリ文字列に値なしでキーを渡そうとしました。結果は...&property=&となります。ほとんどのサーバー環境では、これはデフォルトでは空の文字列として解釈されます。

私は個人的に1.7.1の動作を正しいと考えています。これは、開発者がパラメータの種類を削除するのではなく、パラメータの存在を確認するためです。それは、オブジェクト階層を扱うことはできませんので、


ここ

  • traditional: true言及した様々な事柄についてのいくつかの注意事項は、完全に間違っています。代わりにあなたが得るものは:...&key=[object Object]、これはすべてのオブジェクトのjavacriptのtoString()のデフォルトの結果です。dataに割り当てられ

  • JSON.stringifyあなたは、サーバー側で「手で」意味のあるオブジェクトにデシリアライズする必要があり、その場合にはprocessData: false、とそれを組み合わせる場合を除き、クエリ文字列にJSONとして渡された全体のことになります。これは一般的には便利なオプションですが、単純なチェックではおそらく最小限の手間で作業することになるかもしれないというこのケースでは過度のことです。

0

あなたの問題で

おかげで、空の配列です。あなたは、空の文字列を送信するか、またはthisに応じて、あなたはtraditional: true

traditionalからapaart this答えは、またJSON.stringifyを使用することを提案もありますが設定してみてください。このコメントでは、aps.netのmvcモデルバインダーについても言及しています。

私はrubyがasp.net mvcのモデルバインディングと同等のものを達成する方法はありませんが、これはあなたが見なければならないところだと思います。

+0

空の文字列を送信したくありません。私は空の配列を送信したい。サーバー上の要求を一様に扱うことができるように。私は '' tranditional:true''を試しましたが、期待通りに動作しません。また、私に指示した投稿の回答は受け入れられません。 –

関連する問題