我正在尝试使用Vue 2.0和axios,但我遇到了一些问题。 当我尝试使用axios向post.php文件发送post请求时,$ _POST数组始终为空。
发布功能:
doPost: function() {
console.log("post in progress")
axios.post('api/post.php', {
title: 'foo',
body: 'bar',
userId: 1
})
.then(response => {
console.log(response)
console.log(response.data)
this.filter = response.data
})
.catch(e => {
this.errors.push(e)
})
}
post.php中
<?php
header('Content-Type: application/x-www-form-urlencoded');
echo json_encode($_POST);
?>
请求以状态200完成,但返回一个空对象&#34; []&#34;
注意:当我将post端点更改为jsonplaceholder工具时,它可以正常工作。
答案 0 :(得分:8)
我认为你可以试试这个,它应该是数据类型的问题。
var data = new FormData();
data.append('title', 'foo');
data.append('body', 'bar');
axios.post('api/post.php', {
data: data
})
.then(response => {
console.log(response)
console.log(response.data)
this.filter = response.data
})
.catch(e => {
this.errors.push(e)
});
答案 1 :(得分:6)
用axios发送的数据未放入PHP的$_POST
中。
相反,它位于请求正文中,并且很可能采用json格式。
要获取它,请尝试以下代码:
function getRequestDataBody()
{
$body = file_get_contents('php://input');
if (empty($body)) {
return [];
}
// Parse json body and notify when error occurs
$data = json_decode($body, true);
if (json_last_error()) {
trigger_error(json_last_error_msg());
return [];
}
return $data;
}
$data = getRequestDataBody();
var_dump($data)
或者您也可以像其他答案一样使用FormData
。
答案 2 :(得分:2)
对我来说,问题是我在 url 中使用了 http 而不是 https。服务器返回的 http 状态代码永久移动(到 https 站点)。浏览器或命令行客户端 (curl) 遵循这些重定向。我的代码没有。解决方案是在 url 中使用 https。