としてPlainObjectを受け付けていないI、次のコードを有する:jQueryのAjaxの方法は、データ
$.ajax({
method: "POST",
url: "/handler",
contentType: "application/json",
data: data_all,
})
.done(function(r) { ...stuff... })
.fail(function(r) { ...stuff... });
data_all
が辞書である(例えば、{"a":1, "b":2}
)。このコードを実行すると、現在400エラーが返されます(関連する場合はdjangoを使用)。 1つを変更した場合:
...
data: JSON.stringify(data_all),
...
すべてが動作します。
事はそうではありません。 jQuery AJAXのドキュメントには、data
引数が文字列、配列、およびPlainObjectsを受け入れることが明確に記載されています。 (クロームdevのツールを使用して)デバッガモードでは、私はdata_all
がPlainObjectであることを確認したら:
jQuery.isPlainObject(data_all) # returns "true"
私はjQueryの2.1.4を使用していますので、これはあるはずです。なぜこれにstringify
機能が必要なのでしょうか?
@Mikey - ありがとう、固定 – eykanal
右に、オブジェクトを付けることができます。しかし、jQueryは、指定されたコンテンツタイプに一致するようにオブジェクトを自動変換しません。 Objectがjsonでない場合、jqueryはそのオブジェクトをparam文字列に変換します。したがって、コンテンツタイプに無効なデータが与えられます。それはドキュメントのすべてです。 –
ブラウザの開発者ツールの[ネットワーク]タブを見て、それぞれの場合に何がサービスに渡されるのかを確認します。また、ajaxオプションオブジェクトで 'processData:false'を設定することもできます。 –