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-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)) }
...
我有这个获取方法
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-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)) }
...