【问题标题】:angularjs using $http.post to PHP but getting empty arrayangularjs 使用 $http.post 到 PHP 但得到空数组
【发布时间】:2015-08-16 13:43:49
【问题描述】:

现在我有一个基本的发布请求,使用 Angular 中的 $http 服务。我在 console.log 中看到状态为 200(成功)的所有内容,但在 PHP 中没有运气。我试过使用 JSON_decode,我试过 $_POST (var_dump) 没有运气。如果您能想到解决方案,请提供帮助。

app.js

 var postData={
            firstName:'something',
            lastName:'here'
    };
    postData=JSON.stringify(postData);
    $http({method:'POST',url:'sendmail.php',data:postData,headers: {'Content-Type': 'application/x-www-form-urlencoded'}})
        .success(function (data,status,headers,config) {
            console.log('Success' + data); 
        })
        .error(function (data, status,headers,config) {
            // uh oh
            console.log('error' + status + data);
        });

发送邮件.php

$args = json_decode(file_get_contents("php://input"));
echo $args->firstName;

在我的 php 文件中,我收到以下错误。

注意:尝试在第 3 行的 /Applications/MAMP/htdocs/my-new-project/sendmail.php 中获取非对象的属性

但是,在我的 console.log 中,我得到了:

成功

另外,我有一个存在同样问题的现场网站。

重申一下,无论我做什么,(添加标头,JSON 解码)PHP 数组都是空的。

【问题讨论】:

  • $http 自动对您的对象进行字符串化。跳过代码中的那一步
  • sendmail 是否需要一个数组?如果是这样,请尝试将 'true' 作为第二个参数添加到您的 json 解码调用中。
  • 如果它期待一个数组,不明白你的意思。我试过 var_dump($data) 和 var_dump($_POST) ,两者都是空的。另外,试过了,但没有运气......有没有办法发送到一个javascript文件来查看数据是否在那里?
  • 好的,这是问题....在我的 php 文件中,我执行以下操作... echo $_POST['firstName'];回声 $_POST['lastName'];这样做时,它会输出到我的控制台日志。因此,它就像 php 文件正在工作,但是我无法让它在实际的 PHP 文件上回显。

标签: javascript php angularjs post


【解决方案1】:

当你在 AngularJS 中 $http.post() 时,你可以从 $_POST 数组中获取 PHP 中的参数,例如:

echo $_POST['firstName'];

如果 $_POST 是空的,那么你在其他地方就有问题了。

尝试隔离您的问题。 您可以使用 Postman、HTTPRequester 或任何其他 Firefox/Chrome 插件来模拟对 PHP 脚本的请求。

首先让你的 PHP 脚本工作,然后让你的 AngularJS 发布请求工作。

【讨论】:

    【解决方案2】:

    这实际上与 Angular 传递数据的方式有关。默认情况下被序列化为 JSON 格式,这会导致 PHP 出现问题。

    我将假设您的数据来自某些输入或类似的东西。最好在表单字段上使用 ng-model

    基本上,您必须在请求中传递自定义标头。在这段代码中,我只使用一个输入:

    $http({
      method  : 'POST',
      url     : 'your_url',
      data    : 'data-name=' + $scope.yourValue,//in PHP then you look for $_POST['data-name']
      headers : {'Content-Type': 'application/x-www-form-urlencoded'}
    }).then(
      // success callback
      function(response){
        // success code
      },
      // error callback
      function(response){
        // success code
      }
    );
    

    为了更好地掌握如何做到这一点,请阅读这篇文章:

    Forms in AngularJS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-22
      • 2014-07-04
      • 2016-07-16
      • 2019-07-21
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多