Я пробую Fetch API в первый раз, и у меня возникают проблемы с отправкой POST
данных на сервер PHP.
Я ухожу от $.ajax
и пробую чистые решения javascript для связи сразные серверы (иногда локальные, иногда нет). Теперь я пытаюсь понять Fetch API и, даже если он прост и интуитивно понятен, я наткнулся на странную и неожиданную проблему:
Я НЕ МОГУ отправить сообщение JSON в PHPсервер
Я МОГУ отправить сообщение с данными формы на ЛОКАЛЬНЫЙ PHP
Я НЕ МОГУ отправить сообщение с данными формы на WEB URL PHP
Я могу (очевидно) извлечь данные из всего вышеперечисленного, но странным образом ничего не приходит. Через $_SERVER['REQUEST_METHOD']
я вижу, что при использовании локального пути я получаю «POST», как я и просил, но при использовании веб-URL он меняется на GET
, почему-то я не понимаю.
url="/";
url="www.something.com";
fetch(url, {
method: 'POST',
body: JSON.stringify({
test: "toast",
})
})
.then(function(response) {
return response.text();
})
.then(function(data) {
console.log(data);
});
Я рассчитываю только на отправку и получение данных надежным и понятным способом. Нет jquery, нет библиотек и т. Д. Я просто хочу отправить JSON {"test":"toast"}
и найти его в файле PHP при проверке $_POST
var.
UPDATE
Кажется, что проблемас местными и веб-URL были на эту разницу: www.something.com/test => www.something.com/test/index.php. Без index.php по какой-то причине он отказался от данных POST (но все равно читал отраженную информацию). Но проблема с JSON остается.
ОБНОВЛЕНИЕ
Я обнаружил, что $ _POST и $ _GET плохо работают с Fetch API. Вы должны использовать php: // input , чтобы получить все данные, отправленные на сервер.
Не знаю почему. Есть лучшее решение? Почему ajax и XMLHttpRequest не имеют подобных проблем?
Примечание. Если вы хотите, чтобы данные распознавались как json, вы должны указать их с заголовком, даже если это никогда не запрашивалось, так почему сейчас? В Fetch API чего-то не хватает?
header('Content-Type: application/json');
$test=json_decode(file_get_contents("php://input"));
//some code
echo json_encode($test);