Your_Uncle_Ostap
@Your_Uncle_Ostap
Учусь премудростям

PHP обработчик не получает POST запрос?

Всем привет. Прошу помощи. Суть такова. С фронта уходит запрос на бэк для отправки по почте. Но на бэке $_POST пуст. Естественно приходит пустое письмо.

БЭК:
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    // Если к нам идёт Ajax запрос, то ловим его
    echo 'Это ajax запрос!';
    exit;
}
//Если это не ajax запрос
echo 'Это не ajax запрос!';
$postData= $_POST;
var_dump($postData);

$to  = 'bistweeem@gmail.com'; 

// тема письма
$subject = 'Письмо с моего сайта';
// текст письма
$message = $_POST['name'];

$headers  = "Content-type: text/html; charset=windows-1251 \r\n";
$headers .= "From: От кого письмо <from@example.com>\r\n";
$headers .= "Reply-To: reply-to@example.com\r\n";
// Отправляем
mail($to, $subject, $message, $headers);


ФРОНТ:
onSubmit = (e) => {
        e.preventDefault();
        const data = this.state;
        console.log(data);
        fetch("send.php", {
            method: "POST",
            body: JSON.stringify(data),
            headers: {
                'Content-Type': 'application/json;charset=utf-8',
                'Accept': 'application/json'
            }
        })
            .then(response => {
                console.log(response.text());

            })
            .catch(err => {
                console.log(err.text())
            })
    };


КОНСОЛЬ:
Promise {<pending>}
__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: "array(0) {↵}↵"
  • Вопрос задан
  • 417 просмотров
Решения вопроса 1
@granty
При 'Content-Type': 'application/json' массивы-обертки $_POST /$_GET на сервере не заполняются, так не присылается Имя_Параметра, а присылается только Значение_Параметра.
Сервер не может обработать такие данные автоматически ($_POST - ассоциативный массив, а имя_переменной не прислано).

Получить такие данные можно только через php://input
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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