PHP не понимает тела запросов JSON. Поэтому, когда ему отправляется текст JSON, PHP не будет автоматически анализировать JSON и помещать данные в глобальную переменную $ _POST.
Также fetch()
будет использовать MIME-текст по умолчанию / обычный для типа содержимого, когда тело является просто текстом. Таким образом, даже если вы установите body
для данных, скажем, в формате x-www-form-urlencoded
, он не установит правильный заголовок запроса, а PHP не сможет его правильно проанализировать.
Вам либо нужно вручную получить отправленные данные и проанализировать их самостоятельно:
<?php
$dataString = file_get_contents('php://input');
$data = json_decode($dataString);
echo $data->first_name;
Отправка данных в виде другого типа содержимого, например application/x-www-form-urlencoded
, путем явной установки заголовка типа содержимого и передачи правильного форматированного body
:
fetch('/', {
method: 'POST',
headers:{
"content-type":"application/x-www-form-urlencoded"
},
body: "first_name=name&email=email@example.com"
})
Или даже создать объект FormData
и позволить fetch автоматически определять правильный тип содержимого для использования:
var data = new FormData();
data.append('first_name','name');
data.append('email','email@example.com');
fetch('/', {
method: 'POST',
body: data
})