0

最近、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() を使用して動作させる方法はありますか?

4

2 に答える 2

1

$.postprocessDataは引数としてサポートされていません。http://api.jquery.com/jQuery.post/

jQuery.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

アップデート

processData: falseデータパラメータをそのまま(この場合はjson文字列として)残し、リクエストボディとして送信するようにjqueryに指示します。$.postを無効にするオプションがないため、最初に使用せずprocessDataにそれを行うことはできません$.post$.ajaxSetup({processData: false, contentType: "application/json"});

于 2012-08-09T14:44:40.107 に答える
0

答えは、$.post() が自動的にデータを application/x-www-form-urlencoded としてエンコードすることだと思います。$.ajax() 呼び出しに切り替えると、エンコーディングを選択できるようになります。これは、私の経験から明らかです。みんな、ありがとう!

于 2012-08-15T23:19:33.457 に答える