RESTfulなバックエンドを持つWebアプリケーションの場合、jqueryの$postを使用してjsonをサーバーに送信しています。今私の驚いたことに、jsonはリクエスト本体ではなくリクエストのフォームデータのパラメータキーに詰め込まれています。私はいくつかのことを考えることができますother ways to do it、しかし、質問は私が期待どおりに動作しない理由です。私はscalatraを使用して、いくつかの要求情報を印刷サーバー上なぜjqueryはリクエスト本体ではなくパラメータ名としてjsonを投稿しますか?
:
println("Request received:")
println(fromInputStream(request.getInputStream).getLines().mkString)
println("--------------")
println(request.getParameterMap.toString)
println("==============")
今、私が正しいと思う何が簡単なカール:
curl -X POST http://localhost:8080/x -H "Content-Type: application/json" -d '{"a":"b"}'
が生成されます
Request received:
{"a":"b"}
-------------
{}
==============
そして問題を説明するためのhtml + jsのビット:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<body>
<button type="button" onclick="doPost()">
POST
</button>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
function doPost() {
$.post("http://localhost:8080/x",
JSON.stringify({"a":"b"}),
function(data) {});
}
</script>
</body>
</html>
が生成されます
Request received:
--------------
{{"a":"b"}=[Ljava.lang.String;@7a2897ac}
==============
をだから私は文字列化されたJSON文字列と私は単一のパラメータキーに詰めすべてを取得するコールバックで$ポストを使用している場合。これが正常であれば、理由を知りたいのですが、サーバー上でこれをきれいに解明する方法を知りたいと思います。それが正常でない場合は、$ postを使用してレスポンス本体で取得するために何をすべきかを知りたいと思います。
UPDATE:私はあなたが$.ajax
$.ajax(
{
url: "http://localhost:8080/x",
data: JSON.stringify({a: 'b'}),
processData: false,
type: 'POST',
contentType: 'application/json'
}
);
processData
にドロップダウン場合は、この操作を行うことができると思いfeature request for jquery to support contentType on $.post