Đối với một webapp với một phụ trợ RESTful tôi đang gửi một số json đến máy chủ bằng cách sử dụng jquery's $post. Bây giờ ngạc nhiên của tôi, json được nhồi trong một khóa thông số cho dữ liệu biểu mẫu của yêu cầu, thay vì trong phần thân yêu cầu. Tôi có thể nghĩ về một số other ways to do it, nhưng câu hỏi là tại sao nó không hoạt động như tôi mong đợi.Tại sao jquery post json như một tên tham số thay vì là phần thân yêu cầu?
Trên máy chủ tôi sử dụng scalatra và in một số thông tin yêu cầu:
println("Request received:")
println(fromInputStream(request.getInputStream).getLines().mkString)
println("--------------")
println(request.getParameterMap.toString)
println("==============")
Bây giờ một curl đơn giản mà làm những gì tôi nghĩ là đúng:
curl -X POST http://localhost:8080/x -H "Content-Type: application/json" -d '{"a":"b"}'
Tạo:
Request received:
{"a":"b"}
-------------
{}
==============
Và bit html + js để minh họa sự cố:
<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>
Tạo:
Request received:
--------------
{{"a":"b"}=[Ljava.lang.String;@7a2897ac}
==============
Vì vậy, nếu tôi sử dụng $ bài với một chuỗi json chuyển đổi thành chuỗi và gọi lại tôi nhận được tất cả mọi thứ nhồi trong một chìa khóa thông số duy nhất. Nếu điều này là bình thường, tôi muốn biết tại sao, và làm thế nào tôi phải làm sáng tỏ điều này một cách rõ ràng trên máy chủ. Nếu nó không phải là bình thường, tôi muốn biết những gì tôi nên làm gì để có được nó trong cơ thể phản ứng bằng cách sử dụng $ post.
UPDATE: Hiện nay, một feature request for jquery to support contentType on $.post