【问题标题】:Make XmlHttpRequest POST using JSON [duplicate]使用 JSON 制作 XmlHttpRequest POST [重复]
【发布时间】: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 对象。如果您对特定库或代码块有疑问,请改为发布。

标签: javascript json ajax


【解决方案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 类型的默认编码/字符集
猜你喜欢
  • 2017-04-15
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 2014-06-14
  • 2017-09-27
  • 1970-01-01
  • 2017-10-01
  • 2016-12-28
相关资源
最近更新 更多