Ric*_*ard 9 javascript php fetch-api
我有这个获取方法
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));
}
Run Code Online (Sandbox Code Playgroud)
当我点击时,我的 xhr 身体吃饱了:
但是,如果我尝试从我的asklogin.php 中回显这些参数
echo "no".$_POST['pass'].":".$_POST['login'];
Run Code Online (Sandbox Code Playgroud)
我得到的只是no:
感谢您的帮助
Hym*_*Zzy 24
$_POSTPHP 只会识别具有指定内容类型标头的表单数据(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
})
...
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是改变 PHP 端读取数据的方式
...
if( is_empty($_POST) ){ $_POST = json_decode(file_get_contents('php://input'), true) }
...
Run Code Online (Sandbox Code Playgroud)