AJAX中的JSON对象' post'请求

时间:2018-05-14 20:31:41

标签: javascript json ajax forms

我正在尝试将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对象,我在发送数据之前将其字符串化。

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

1 个答案:

答案 0 :(得分:2)

如果API确实支持JSON参数,则应设置正确的Content-type:

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

如果确实需要网址编码参数,则无法使用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期望的格式,例如。