@khodos_dmitry

Почему через post не передаются данные?

(function () {
    'use strict';
    setTimeout(() => {
        check();
    }, 3000);
})();

async function check() {
        try {
            const response = await fetch('https://site.ru/script.php', {
                method: 'POST',
                body: JSON.stringify({yes: 'yes'}),
                headers: {
                    'Content-Type': 'application/json'
                }
            });
            console.log(response);
            const json = await response.json();

            console.log('Успех:', json);
        } catch (error) {
            console.error('Ошибка:', error);
        }
}

Хочу отправлять запрос с другого сайта с tempermonkey, когда я его посещаю.
Видно что запрос отправляется и назад приходит ответ. Но $_POST и $_REQUEST пустые.
CORS вроде разрешил:
a2enmod headers
и в .htaccess
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Скрин отправки данных:
6235d9cf7cc39743107217.png
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Чтобы $_POST был НЕ пустым надо отправлять данные в кодировке application/x-www-form-urlencoded или multipart/form-data. Вы в своем примере пытаетесь отправить данные в кодировке application/json, при этом еще и неправильно это делайте.

Попробуйте так:
window.addEventListener('load', check); // Запуск check после полной загрузки страницы

async function check() {
	
	var data = {
		'test': 'Привет, мир!',
		'myname': 'Дмитрий'
	};

	var response = await (await fetch('https://site.ru/script.php', {
		'method': 'POST',
		'headers': {
			'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
		},
		'body': new URLSearchParams(data).toString()
	})).text();

	console.log('Ответ сервера:', response);
	
	return response;
	
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
IMHO, у вас в 'body' текст, который совсем не JSON.
Ответ написан
Ваш ответ на вопрос

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

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