@Otrivin
junior full-stack сисадмин

Как отправить данные из браузера на сервер ( JS -> PHP) методом POST?

Здравствуйте!

Пытаюсь сделать отправку на чистом js.
Собираю объект, как его корректно передать на сервер и там разобрать?

Пример js:
// Объект
var obj = {keyFoo: 'Hello', keyBar: 'world!'};

// Передача
var request = new XMLHttpRequest();
request.open('POST', '/my/url.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.send( JSON.stringify(obj) ); // Правильно ли подготовил к отправке?


И как потом принимать этот объект на бэкенде, чтобы можно было обращаться к значениям по ключам? Пытался с помощью json_decode(), но, видимо, где-то ошибаюсь

Upd, решение
var obj = {keyFoo: 'Hello', keyBar: 'world!'};

var request = new XMLHttpRequest();
request.open('POST', '/test2.php', true);
request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
request.send( JSON.stringify(obj) );

<?php

$postData = file_get_contents('php://input');
$data = json_decode($postData, true);
$toLog = var_export($data, true);

?>

  • Вопрос задан
  • 256 просмотров
Решения вопроса 1
Immortal_pony
@Immortal_pony Куратор тега PHP
Если вы устанавливаете заголовок 'application/x-www-form-urlencoded', то и кодировать строку надо с помощью encode​URIComponent(), а не JSON.stringify. Тогда на сервере можно будет просто вытащить данные из массива $_POST безо всяких json_decode.
Альтернативным вариантом является смена заголовка на 'Content-Type: application/json' и кодирвоание данных с помощью JSON.stringify, но тогда на стороне php данные надо искать в php://input, а не в $_POST и декодировать с помощью json_decode
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы