XMLHttpRequest не отправляет данные POST - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь отправить данные POST в файл PHP с помощью XMLHttpRequest. URL-адрес правильный, но PHP не может перехватить любые отправленные данные и просто вернуть нулевой ответ.

Я использую чистый JavaScript из клиента и PHP 7.1 на сервере

Мой PHP:

$data->msg = 'PHP is working';
$data->user = $_POST['user'];
$data->pass = $_POST['pass'];
echo json_encode($data);

Мой Javascript:

var data = { 'user': 'myUser', 'pass': 'myPass' };

var xhr = new XMLHttpRequest();
xhr.open('POST', 'myurl', true);
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var res = JSON.parse(xhr.response);
        console.log(res);
    }
};
xhr.send(data);

// Expected output: {msg: "PHP is working", user: myUser, pass: myPass}

// But just recive: {msg: "PHP is working", user: null, pass: null}

Я ожидаю этот ответ: {msg: «PHP работает», пользователь: myUser, pass: myPass} Но просто получите это: {msg:«PHP работает», пользователь: null, pass: null}

Как вы можете видеть, PHP $ _POST не может перехватить мои отправленные данные поста и просто возвращает ноль. Что за работа ??

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Для получения json в php необходимо прочитать тело запроса:

$request = json_decode(file_get_contents('php://input'), true);

$data->msg = 'PHP is working';
$data->user = $request['user'];
$data->pass = $request['pass'];

echo json_encode($data);
0 голосов
/ 03 октября 2019

Проблема в вашем типе контента. Если вы используете application/json, PHP не будет анализировать данные записи в переменную $ _POST. Вы должны отправить их как данные формы, чтобы PHP проанализировал их.

См. Этот вопрос для получения дополнительной информации Отправка данных POST с использованием XMLHttpRequest

В качестве альтернативы вы можете использовать file_get_contents("php://input")чтобы получить необработанное тело HTTP-запроса и проанализировать json с помощью json_decode.

Пример с file_get_contents и json_decode

Код PHP:

$in = file_get_contents('php://input');
$decoded = json_decode($in, true);
$data = new stdClass();
$data->msg = 'PHP is working';
$data->user = $decoded['user'];
$data->pass = $decoded['pass'];
echo json_encode($data);

Код JS:

var data = { 'user': 'myUser', 'pass': 'myPass' };

    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'myUrl', true);
    xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4 && xhr.status === 200) {
            var res = JSON.parse(xhr.response);
            console.log(res);
        }
    };

    xhr.send(JSON.stringify(data));
    return false;

Обратите внимание, что вам необходимо JSON.stringify объект данных, прежде чем передать его в качестве аргумента методу send(). В противном случае данные отправляются неправильно.

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