gpt4 book ai didi

jquery - 为什么jquery将json作为参数名称而不是作为请求正文发布?

转载 作者:行者123 更新时间:2023-12-03 22:36:59 28 4
gpt4 key购买 nike

对于具有 RESTful 后端的 Web 应用程序,我使用 jquery 的 $post 将一些 json 发布到服务器。 。现在令我惊讶的是,json 被填充在请求表单数据的参数键中,而不是在请求正文中。我能想到一些other ways to do it ,但问题是为什么它不能按我的预期工作。

在服务器上我使用 scalatra 并打印一些请求信息:

println("Request received:")
println(fromInputStream(request.getInputStream).getLines().mkString)
println("--------------")
println(request.getParameterMap.toString)
println("==============")

现在一个简单的 curl 可以做我认为正确的事情:

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}
==============

因此,如果我将 $post 与字符串化的 json 字符串和回调一起使用,我会将所有内容都填充到单个参数键中。如果这是正常的,我想知道为什么,以及我应该如何在服务器上彻底解决这个问题。如果不正常,我想知道应该如何使用 $post 将其放入响应正文中。

更新:现在有一个 feature request for jquery to support contentType on $.post

最佳答案

我想如果你下拉到 $.ajax 就可以做到这一点

$.ajax(
{
url: "http://localhost:8080/x",
data: JSON.stringify({a: 'b'}),
processData: false,
type: 'POST',
contentType: 'application/json'
}
);

processData 告诉 jquery 不要弄乱你的数据,并且设置 contentType 应确保你的后端不会尝试解析 json,因为它是常规 url 编码表格。

关于jquery - 为什么jquery将json作为参数名称而不是作为请求正文发布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8757681/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com