【问题标题】:JSON object in AJAX 'post' requestAJAX“发布”请求中的 JSON 对象
【发布时间】:2018-10-24 14:25:00
【问题描述】:

我正在尝试将 json 对象推送到服务器:

[
    {
        name: "A",
        username: "A",
        password: "123456",
        email: "A@gmail.com"
    },
    {
        name: "B",
        username: "B1",
        password: "123456",
        email: "B1@example.com"
    }
]

save.addEventListener("click", function () {
    var dataJson = JSON.stringify(myNewData);
    var request2 = new XMLHttpRequest();
    request2.open("POST", "url", true);
    request2.setRequestHeader("Content-type", "application/json;charset=UTF-8");
    request2.send(dataJson);

    request2.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            console.log(this.responseText);
        }
    };
});

myNewData 是一个 JavaScript 对象,我在发送数据之前对其进行字符串化。

这是发送数据的正确格式吗?由于某种原因,这样做时似乎没有填充值

【问题讨论】:

  • 如果是发送JSON,为什么要将内容类型设置为x-www-form-urlencoded
  • 你说得对,我现在已将其更新为 "application/json;charset=UTF-8" 但它仍然给了我 {"response":"sccess","content":"请填写所有值"}

标签: javascript json ajax forms


【解决方案1】:

如果API真的支持JSON参数,你应该设置正确的Content-type:

request2.setRequestHeader("Content-type", "application/json");

如果它确实需要 URL 编码的参数,则不能使用 JSON.stringify()。您需要遍历对象并将它们转换为name=value 形式的 URL 编码参数。要发送数组,请在名称后使用[]

var dataArray = [];
myNewData.forEach(obj => Object.keys(obj).forEach(key => dataArray.push(encodeURIComponent(key + "[]") + "=" + encodeURIComponent(obj[key]))));
request2.send(dataArray.join("&");

例如,这是 PHP 所期望的格式。

【讨论】:

    猜你喜欢
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2017-03-22
    • 2020-02-11
    • 2018-06-15
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多