【问题标题】:axios http always returns with empty dataaxios http 总是返回空数据
【发布时间】:2017-05-18 13:31:29
【问题描述】:

我之前问过这个问题,但无法得到答案。我能够使用方法:像下面的'get'来让它工作所以没关系,但这次我需要使用post。在另一个项目(使用 react、redux、php、webpack、xampp)中,同样的问题再次出现,我正试图解决这个问题。所以这里是:

register.php

  echo $_GET['task'];

index.js

  const values = {task: 'doSomething', username: 'username'}
  axios({
      url: "./server/register.php",
      timeout: 20000,
      method: 'get',
      params: values
  }).then(function(response){console.log(response.data)})

当我执行上述操作时,一切正常,数据被注销为“doSomething”。但是,当我尝试使用 axios({method: 'POST'}) 并将 php 更改为 $_POST['task'] 时,我收到一条错误消息,指出 $_POST['task'] 未定义,如下所示:

index.js

  axios({
      url: "/projects/myProject/server/register.php",
      method: 'post',
      data: values
  }).then(function(response){console.log(response.data)})

register.php

echo $_POST['task'];

注意:未定义索引:任务

此外,当我使用 axios.post() 尝试此操作时,我遇到了完全相同的问题。我想在这里使用发布请求。谁能帮我解释一下?

【问题讨论】:

    标签: javascript php reactjs redux axios


    【解决方案1】:

    好吧,经过相当多的挠头后,我找到了答案。在 PHP 上,必须先添加这一行,然后才能访问任何 POST 数据:

    $_POST = json_decode(file_get_contents('php://input'), true);
    echo $_POST['task'];
    

    据我了解,从 axios 输入的数据是 JSON,因此我们必须使用 file_get_contents() 将其返回为 JSON 编码字符串,然后使用 json_decode 从 JSON 编码字符串将其转换为 php 变量。希望这对其他人有帮助。谢谢你。

    【讨论】:

      【解决方案2】:

      您的网址格式错误:它是路径而不是网址。您必须使用相对 (/register.php) 或绝对 (http://localhost/register.php) url,这取决于您如何通过 Web 服务器提供此文件。

      【讨论】:

      • 我尝试了两种方法,并更新了我的问题以包含此内容。不幸的是,我仍然遇到同样的错误。未定义。
      • 你有一个为你的 register.php 服务的网络服务器吗?
      • 是的,我愿意。谢谢您的帮助。发现问题后,我在上面添加了答案。
      【解决方案3】:

      作为替代方案,在客户端,您可以在 POST 之前对 JavaScript 中的数据进行处理,从而无需在服务器端编辑 POST 数据:

      var formatAxiosPostData = function (obj) {
      // Create formData object:
          var formDataObject = new FormData();
      // This step necessary when the obj contains additional overhead data,
      // such as what's created on a 'this.$data' Vue.js object:
          obj = JSON.parse(JSON.stringify(obj));
      // Fill formData object with the key-value pairs:
          Object.keys(obj).forEach(function (key) {
              formDataObject.append(key, obj[key]);
          });
          return formDataObject;
      };
      
      // example usage:
      axios({
          url: "/projects/myProject/server/register.php",
          method: 'post',
          data: formatAxiosPostData(values)
      }).then(function (response){
          console.log(response.data);
      });
      

      【讨论】:

        猜你喜欢
        • 2019-12-16
        • 2019-12-02
        • 2016-05-18
        • 2014-11-15
        • 2021-02-20
        • 2018-07-13
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多