Как опубликовать объект JavaScript, где каждый элемент объекта становится строкой $ _POST с xmlhttprequest? - PullRequest
1 голос
/ 23 января 2020

Это не дубликат Отправка данных POST с использованием XMLHttpRequest .


Я хотел бы опубликовать JavaScript объект в JS , Я уже прочитал следующие вопросы:

Ни один ответ на мой вопрос, так как я хотел бы, чтобы каждый элемент моего JS объекта стал строкой $ _POST. Вот пример:

myObj = { key1:'value1', 'key2':'value2' }

r = new XMLHttpRequest();
r.onreadystatechange = callBack;
r.open('POST', url, 'async');
r.send(myObj);

Код на стороне сервера:

var_dump($_POST);

На стороне сервера я хотел бы получить от PHP:

  • $_POST['key1'] установлен на 'значение1'
  • $_POST['key2'] установлен на 'значение2'

Вместо этого $_POST пусто.

Обратите внимание, что предыдущий код работает при отправке строки как:

r.send ("key = value");

Что странно, что ссылка выше говорит, что она должна работать, но однако это не так, хотя я использую современный браузер.

1 Ответ

2 голосов
/ 23 января 2020

Ответ, на который вы ссылаетесь, говорит о том, что вы можете отправить объект в r.send(), неверен. Документация гласит, что аргумент r.send() должен быть:

  • A Document, в этом случае он сериализуется перед отправкой.
  • A BodyInit, который согласно Fetch spe c может быть Blob, BufferSource, FormData, URLSearchParams, ReadableStream или USVString объектом.

Простой объект не является ни одним из них.

Вы должны преобразовать объект в один из этих типов, и строки в кодировке URL обычно используются для обычных данных (обычно FormData используется только когда вам нужно загрузить файлы).

var params = Object.entries(myObj).map((key, val) => encodeURIComponent(key) + '=' + encodeURIComponent(val))
    .join('&');
r.send(params);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...