JSON-объект в AJAX-запросе post - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь отправить объект 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 голосов
/ 14 мая 2018

Если API действительно поддерживает параметры JSON, вы должны установить правильные значения Content-type::

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

Если вам действительно нужны параметры в кодировке URL, вы не можете использовать JSON.stringify(). Вам нужно перебрать объекты и превратить их в URL-кодированные параметры вида name=value. Для отправки массивов используйте [] после имен.

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

Это формат, который ожидает PHP, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...