У меня есть этот метод выборки
loginbutton.onclick = (e)=> {
e.preventDefault();
var creds = {
login: login.value,
pass: pass.value
}
fetch('functions/asklogin.php', {
method: "POST",
header: {"Content-type": "application/json; charset=UTF-8"},
body: JSON.stringify(creds)
})
.then(resp => resp.text())
.then(data => console.info(data));
}
Когда я нажимаю, мое тело xhr сыто:
Но если я попытаюсь повторить эти параметры из моего asklogin.php
echo "no".$_POST['pass'].":".$_POST['login'];
Все, что я получаю, это no:
спасибо за помощь
Это должно вам помочь - stackoverflow.com/q/8893574/4287624
@UrmatZhenaliev пустой массив
@Richard .. Короче говоря, для работы $_POST вам нужно отправить данные в виде данных формы вместе с соответствующим типом контента. Если вы отправляете данные json, вам нужно использовать php://input для чтения опубликованных данных.
Извините, ребята, я должен был упомянуть, что я знаю, что поток является лентой (но я думал, что это было явно, так как я разместил его скриншот). В любом случае, спасибо @HymnZzy, да, но как вы передаете данные в виде классической формы в API-интерфейсе? Я не могу найти правильный синтаксис в документе API
body: Object.entries(creds).map(([k,v])=>{return k+'='+v}).join('&') и установите тип контента как application/x-www-form-urlencodedВы можете сделать, как сказал HymnZzy, но, вероятно, проще (и менее хрупко) просто изменить способ чтения данных PHP.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


$_POST в PHP распознает только данные формы (application/x-www-form-urlencoded или multipart/form-data) с указанным заголовком типа контента.
Для любого другого типа контента вам нужно будет использовать php://input для чтения и анализа данных.
В вашем случае изменение данных, которые вы отправляете через fetch, должно решить проблему.
...
fetch('functions/asklogin.php', {
method: "POST",
headers: {"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"},
body: Object.entries(creds).map(([k,v])=>{return k+'='+v}).join('&') // in jQuery simply use $.param(creds) instead
})
...
Альтернативным решением будет изменение способа чтения данных на стороне PHP.
...
if ( is_empty($_POST) ){ $_POST = json_decode(file_get_contents('php://input'), true) }
...
Хорошо, адаптация на стороне php работает. Не метод выборки, кажется, что-то не хватает в строке? в любом случае, спасибо!
Это должно быть: $_POST = json_decode(file_get_contents('php://input'), true)
Какой результат, когда вы
var_dump($_POST)?