js fetch post 有效,但 php 为空

js fetch post works, but php is empty

我有这个获取方法

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.log(data));
}

当我点击时,我的 xhr body 吃饱了:

但是,如果我尝试从 asklogin.php

中回显这些参数
echo "no".$_POST['pass'].":".$_POST['login'];

我得到的只是no:

感谢您的帮助

$_POST in PHP 将只识别具有指定内容类型 header.[=17 的表单数据(application/x-www-form-urlencodedmultipart/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)) }
...