Отправляю с помощью fetch POST-ом данные PHP-скрипту. В переменной $_POST пусто, но скрипт выполняется точно и данные передаются точно, потому что принимаются через php://input. Пробовал разные headers, в частности content-type, всё копировал из заголовка, который посылается браузером обычной <form> - не помогает. В чем причина и, если всё-таки данные можно принять в $_POST, каким условиям они должны удовлетворять?
Нет, не ошибся. Код (Javascript): fetch('comments.php', { method: 'POST', credentials: 'same-origin', mode: 'cors', cache: 'no-cache', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, redirect: 'follow', referrerPolicy: 'no-referrer', body: 'test' });
Читайте описание параметра body. application/x-www-form-urlencoded – это вам не просто строка GET-параметров. Если хотите хардкодить тело, нужно писать как мин. test=
С таким параметром отсылает post-методом стандартная html-форма. Но неважно, что там будет, я пробовал всё - multipart/form-data; application/json; text/html; text/plain... В $_POST ничего не приходит.
Очевидно, потому, что PHP не может "расшифровать" то, что отправляете. Ознакомьтесь внимательно: Fetch (javascript.ru) Ещё чуток подробного описания: ajax - PHP "php://input" vs $_POST - Stack Overflow
Ничего нового, увы, для меня нет, особенно по первой ссылке (я сейчас очень интенсивно ботаю JS по хорошей литературе), но всё равно спасибо Принимать сырые данные - не вопрос, я их легко распаршу, тут мне не привыкать
Очевидно, все же тема не для этого раздела. Content-Type должен соответствовать формату тела. Смысл что-то искать в $_POST при application/json; text/html; text/plain? Даже если пых при таких заголовках распарсит вам тело, это все на тоненького. Я вам показал абсолютно корректный пример тела для передачи параметра test с пустым значением в url-кодировке. Если не работает, значит имеет место опечатка в заголовке или еще какая-то элементарная ошибка.