Отправляю запрос в формате x-www-form-urlencoded (заголовок явно указан), на сервере читаю $_POST и там абсолютно пусто... При этом данные доступны вот так: file_get_contents("php://input") (получаю закодированную строку). Почему так происходит? Почему сервер сам не разбирает запрос в $_POST?
P.S. Проблема проявилась когда попытался перелезть с $.ajax на fetch. До этого все работало!
Пример отправки запроса:
const fetchUrlEncoded = (url, data) => fetch(url, {
method: 'POST',
headers: {'Content-Type': 'x-www-form-urlencoded; charset=UTF-8'},
body: new URLSearchParams(data),
});
await fetchUrlEncoded('/ajax/myscript.php', {x: 123, y: 321});
P.P.S. Вообще не помню отправлял ли я когда-нибудь в этом формате POST запросы. PHP вообще должен их парсить? Может это нормально? О_о Что тогда мне через parse_str данные разбирать?
Пытался кстати еще через multipart/form-data отправить и тоже нефига не разбирает!!! Да что с этим fetch не так? Или это я такой криворукий? =(
const createFormData = data => Object.entries(data).reduce((f, [k, v]) => {
f.append(k, v);
return f;
}, new FormData());
const fetchFormData = (url, data) => fetch(url, {
method: 'POST',
headers: {'Content-Type': 'multipart/form-data; charset=UTF-8'},
body: createFormData(data),
});
Сборка персонального компьютера от Artline: умный выбор для современных пользователей