Как получить значение в php из js запроса?

Запрос js, должен написать в консоли браузера результат, а именно '222':

const res = await fetch('php/test.php', {
    method:'POST',
    body: JSON.stringify({'data': '222'})

})
const json = await res.json()
console.log(json)

php файл:

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
   $a = json_decode($_POST['data']);
    echo json_encode(['test'=>$a]);
}

В результате приходит это:

{test: null}

При этом запрос проходит в проверку, но содержимое - '222' не вытягивается. Как правильно сделать нужно?


Ответы (2 шт):

Автор решения: Гончаров Александр

Вы из JS отправляете просто тело запроса, это называется raw-данные. Их можно так получить.

var_dump( json_decode(file_get_contents("php://input"), true) );

Но удобнее, посылать запрос отдельными переменными:

jQuery.ajax({
    url:'/php/test.php',
    method:'POST',
    data: {data: '222', es4o: '333'}
})

Тогда на стороне сервера вы можете прочитать эти данные из $_POST.

→ Ссылка
Автор решения: Виктор

Как-то так должно быть:

const res = await fetch('php/test.php', {
    method:'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({'data': '222'})
})
const json = await res.json()
console.log(json)


<?php
if( $_SERVER["CONTENT_TYPE"] ==  'application/json') {
    $postData = file_get_contents('php://input');
    $data = json_decode($postData, true);
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($data);
→ Ссылка