最近、JQuery と Spring Roo を使用して問題に遭遇しました。Spring Roo コントローラーの JSON 対応 URL にデータを投稿したいと考えていました (これは特に重要ではないと思いますが、わかりやすくするためにここに記載しました)。次のように、Curl コマンドを使用してコントローラーにデータを送信できるため、コントローラーが正常に動作することはわかっていました。
curl -i -X POST -H "Content-Type:application/json" http://localhost:8080/PeopleProject/people
-d '{"firstName":"some","lastName":"guy","email":"some@guy.com"}
そこで、次のように、Javascript で $.post() 呼び出しからデータを投稿しようとしました。
var data = {"firstName":"some","lastName":"guy","email":"some.guy@gmail.com"};
$.post('/PeopleProject/people', data, successfulPost ) ;
ただし、サーバー側で入力を解析できないというエラーが発生します。デバッガーを実行すると、この Javascript を介して投稿されたデータは URL エンコードされているのに対し、curl コマンドからのデータはエンコードされていないことがわかりました。
最後に、いろいろいじった後、次の Javascript を試しました。
var jqxhr =
$.ajax({
url: "/PeopleProject/people",
processData : true,
contentType:"application/json",
type : "POST",
data: '{"firstName":"some","lastName":"guy","email":"some.guy@gmail.com"}',
})
そして、これはうまくいきました!しかし、なぜそれが機能し、 $.post() が機能しなかったのかはわかりません。Javascript/JQuery について私よりも詳しい人がこれを説明できますか?
サーバーへの JSON 投稿が名前と値のペアとしてエンコードされることをどこかで読んだと思いましたが、curl コマンドが適切でクリーンな JSON を投稿しているのを見たので、これは正しくないと推測しています。 ) URL エンコードされたクエリ文字列をプッシュしました。
私の質問は次のとおりです。上記の ajax() 呼び出しは、JSON データをサーバーにプッシュするための推奨される方法ですか? または、 $.push() を使用して動作させる方法はありますか?