Zepto または Jquery で $.ajax を使用してオブジェクトの配列を POST したいと考えています。どちらも同じ奇妙なエラーを示しますが、何が間違っているのかわかりません。
「RestEasy」などのテスト クライアントを使用して送信すると、データがサーバーに保存されます。ブラウザのネット パネルでリクエストが壊れているのがわかるので、JS が原因だと思います。
オブジェクトの配列を POST のデータ プロパティとして送信すると、正しく送信されません。
データ オブジェクト:
var postData = [
{ "id":"1", "name":"bob"}
, { "id":"2", "name":"jonas"}
]
リクエスト:
$.ajax({
url: _saveDeviceUrl
, type: 'POST'
, contentType: 'application/json'
, dataType: 'json'
, data: postData
, success: _madeSave.bind(this)
//, processData: false //Doesn't help
});
ブラウザに表示されるリクエスト本文:
"bob=undefined&jonas=undefined"
これは、jQuery と Zepto の両方が POST データを準備するために使用する $.param メソッドを使用することで、より直接的に確認できます。
$.param(
[
{ "id":"1", "name":"bob"}
, { "id":"2", "name":"jonas"}
]
)
// Output: "bob=undefined&jonas=undefined"
したがって、これらのライブラリが複雑な投稿データに対して行う準備は、私の予想とは異なるようです。
この回答が表示されますが、多くのコンテンツを投稿しているため、データをクエリパラメーターとして送信したくありません。 jQueryを使用して.ajax投稿で配列を送信するにはどうすればよいですか?
jQuery/Zepto を使用して POST 経由で複数のオブジェクトを送信する正しい方法は何ですか?
$.ajax({... data: JSON.stringify(postData) ...}) を使用すると、破損していないコンテンツが送信されますが、サーバーはその形式を好みません。
更新: JSON.stringify は正しくフォーマットされたコンテンツを送信するようです。問題は、サーバー側が必要なオブジェクトの構造について非常に具体的であることです。オブジェクトにプロパティを追加または削除すると、一致するプロパティを使用するのではなく、プロセス全体が失敗します。サーバーから送信されたコンテンツをビュー モデルとして使用するのは便利ですが、ビュー モデルが変更されるため、これは不便です。...まだ最善の解決策に取り組んでいます。