Задать вопрос
ilyabond
@ilyabond
В яме даннинга крюгера

Почему PHP не принимает JSON отправленный через AJAX?

Извините если вопрос глупый, я искал решение, но так ничего и не нашёл. Скорее всего что-то упускаю.
Проблема:
Я передаю с помощью AJAX данные методом POST в файл php, объект преобразован в json:
const body = {
	name: 'ilya',
	email: 'test@gmai.com'
}

let xhr = new XMLHttpRequest();
xhr.open('POST', 'newtest.php');
xhr.responseType = 'json';
xhr.setRequestHeader('Content-Type', 'application/json')
xhr.send(JSON.stringify(body))


Вроде как данные передаются:
6009dd5773a9f531663899.png
Но я не могу никак их принять в newtest.php. Вот это:
<?php
$input = json_decode(file_get_contents("php://input"), true);
	print_r($input);
?>

выдаёт null.
Просто принять через пост тоже не выходит.
Пожалуйста, если можно, то подробно объясните мне топору где я лажаю, может это вообще невозможно?
  • Вопрос задан
  • 363 просмотра
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Делай так:
async function sendPOST() {
	
	try {
		
		var formData = new FormData();
		formData.append('name', 'Илья');
		formData.append('email', 'test@gmail.com');

		var response = await (await fetch('newtest.php', {
			method: 'POST',
			body: formData
		})).text();

		console.log("POST-запрос отправлен успешно. Ответ сервера:\n" + response);

		return response;
		
	}
	
	catch (err) {
		
		console.log('При отправке POST-запроса произошла ошибка:');
		console.dir(err);
		
		return false;
		
	}
	
}

Для отправки запроса вызываешь функцию sendPOST()
Внутри PHP-обработчика при этом смотришь глобальную переменную $_POST примерно так:
<?php
print_r($_POST);
?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vladusik2
@Vladusik2
front-end
Попробуйте для теста отрицательный offset поставить, чтобы с конца потока считался файл. И надо сначала просто через var_dump вывести, что приходит в file_get_contents
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы