在Axios POST上PHP Post数组为空

时间:2017-06-28 10:11:27

标签: javascript php axios

我正在尝试使用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工具时,它可以正常工作。

3 个答案:

答案 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。