$.ajax
次のようなデータ ディクショナリを POSTに使用しようとすると、次のようになります。
{
list: ["fake_id_0"],
mapType: "fakeToRealId"
}
jQuery は何かおかしなことをします。データを次のように変換します。
{
list[]: ["fake_id_0"],
mapType: "fakeToRealId"
}
ご覧のとおり、キーにブラケットを追加しますが、list
キーには追加しませんmapType
。一般的なRESTの意味では、はい、配列値を持つキーに括弧で名前を付けるのが一般的です...しかし、私のサーバーはそのようには機能しないため、POSTしようとするとlist[]
問題が発生します。
$.ajax
この問題は、次のコードで parseData オプションの処理まで追跡しました。
// Convert data if not already a string
if ( s.data && s.processData && typeof s.data !== "string" ) {
s.data = jQuery.param( s.data, s.traditional );
}
使用するprocessData: false
と、そのブロックをスキップします...しかし、データをURLエンコードしません。
だから、私の質問は次のとおりです。jQuery でキー名を変更せずに$.ajax
呼び出しを行うにはどうすればよいですか? processData: true
または、それに失敗した場合、どのように使用processData: false
しますか?
PSまたは、これがすべて非標準のjQueryの動作であり、私が持っているプラグインが原因である場合は、代わりにお知らせください:-)
* 編集 *
私は自分の質問に答えましたが、その答えに欠陥があることに気付いたので、その答えを削除しました。traditional:true
(呼び出しで)オプションを設定すると括弧が修正されると答えました$.ajax
が、そうです...しかし、ネストされたオブジェクトをシリアル化しないという副作用もあります。
したがって、私の修正された質問は次のとおりです。jQueryでキー名を変更せずに、ネストされたプロパティのシリアル化を無効にせずに$.ajax
呼び出すにはどうすればよいですか? processData: true
言い換えれば、キーにブラケットを追加しないことを除いて、jQuery に現在と同じようにすべてを実行させるにはどうすればよいでしょうか?