使用 JSON 制作 XmlHttpRequest POST [重复]

Posted

技术标签:

【中文标题】使用 JSON 制作 XmlHttpRequest POST [重复]【英文标题】:Make XmlHttpRequest POST using JSON [duplicate] 【发布时间】:2017-01-23 23:02:42 【问题描述】:

如何使用 vanilla JS 发送 JSON 数据的 AJAX POST 请求。

我知道内容类型是 url 格式编码的,它不支持嵌套的 JSON。

有什么方法可以在普通的旧 JS 中使用嵌套 JSON 发出这样的 POST 请求。我已经尝试过在 SO 上找到的各种序列化方法,但它们都将我的 JSON 扁平化为一种格式。

这是我的 JSON:


   email: "hello@user.com",
   response: 
       name: "Tester"
   

【问题讨论】:

您的问题不包含有效的 JSON。也许您正在发送这个 javascript 对象,然后通过一些过程将其转换为 JSON?无论哪种方式,正如 cmets 中其他人对以下答案所说的那样,没有任何理由应该展平您的 JSON 对象。如果您对特定库或代码块有疑问,请改为发布。 【参考方案1】:

如果你正确使用 JSON,你可以毫无问题地嵌套对象:

var xmlhttp = new XMLHttpRequest();   // new HttpRequest instance 
var theUrl = "/json-handler";
xmlhttp.open("POST", theUrl);
xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xmlhttp.send(JSON.stringify( "email": "hello@user.com", "response":  "name": "Tester"  ));

【讨论】:

您没有在open()中指定目标网址? 不适合我:( @BillalBegueradj,他的目标 URL 是“/json-handler”,一个指向正在调用的域的相对路径。可能是这个名字有点混乱,我也遇到过这种情况......只需将其更改为“someFolderNameHere” 请注意,这只适用于“POST”和“PUT”请求。如果您使用“GET”请求,则 xmlhttp.send([argument]) 的参数将被忽略。我最终将 AWS API Gateway 端点资源更改为“PUT”以解决此问题... charset=UTF-8 是不必要的,因为它是 application/json 类型的默认编码/字符集

以上是关于使用 JSON 制作 XmlHttpRequest POST [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能使用 XMLHttpRequest 从本地网络获取 JSON 文件? [复制]

为啥我不能使用 XMLHttpRequest 从本地网络获取 JSON 文件? [复制]

我已经使用这种 xmlhttprequest 方法来制作显示水质但无法正常工作的实时仪表图表?

XMLHttpRequest + JSON + 文件上传 + axios

用XMLHttpRequest制作一个简易ajax

使用XMLHttpRequest解析json