PHP使用angular的$ http.post()获取空数组

时间:2015-07-26 14:31:18

标签: php angularjs

我正在尝试使用PHP后端从MySQL数据库中检索数据。 使用$ http.get()它可以完美地工作。但是当试图发布某些内容时,php文件只会获得一个空数组。

我的控制器代码如下:

angular
.module('TestModule')
.controller('TestController', ['$scope', 'TestService',
  function ($scope, TestService) {

    TestService.testStuff().success(function(data) {
      console.log(data);
    });
  }]);

我的服务是:

angular
.module('TestModule')
.service('TestService', ['$http',
  function ($http) {

    this.testStuff = function () {
      var obj = {
        test: 'aaa',
        moreTest: 'bbb'
      };

      return $http.post('test-php-post.php', obj);
    };
  }]);

在主模块上,我设置了以下配置:

angular
.module('TestModule')
.config(['$httpProvider',
  function($httpProvider) {
    var serialize = function(obj, prefix) {
      if(!angular.isDefined(obj)) {
        return undefined;
      }

      var str = [];
      for(var p in obj) {
        if (obj.hasOwnProperty(p)) {
          var k = prefix ? prefix + '[' + p + ']' : p, v = obj[p];
          str.push(typeof v === 'object' ?
            serialize(v, k) :
          encodeURIComponent(k) + '=' + encodeURIComponent(v));
        }
      }
      return str.join('&');
    };

    // Use x-www-form-urlencoded Content-Type
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';

    // Override $http service's default transformRequest
    $httpProvider.defaults.transformRequest = [function(data) {
      return serialize(data);
    }];
  }]);

在php文件中,我只注释了所有内容,只留下了echo print_r($_REQUEST, 1); 它只返回Array(),这有点奇怪。

我认为这可能是我的php配置(我正在使用带有php-connect的grunt)但是我已经在我的WAMP服务器上测试了它,甚至在我的网站上(在商业主机上运行LAMP),所以我我猜我可以排除PHP配置错误。

从我完成的四千七百二十九(给予或接受)谷歌搜索(大多数人带我回到这里),没有任何效果。我尝试更改标题,使用其他格式来执行发布请求,例如$http({method:......});,没有运气。我知道我错过了一些非常基本的观点,但我无法弄清楚它是什么。

感谢您提供任何帮助。

修改 我确实看到this post并试了一下。建议的解决方案对我不起作用(我得到一个空字符串作为响应)。事实上,没有一个解决方案有效。我对此感到疯狂。 $ _POST的内容始终为空字符串。 $ _REQUEST是一个空数组。

我可以通过对网址中的数据进行编码来实现它,例如$http.post('test-php-post.php?test=aaa&moreTest=bbb'),但我将使用它来上传文件和大对象。我认为这不是一个好方法,或者是这样吗?如果我没有弄错的话,这基本上是一个GET,即使使用$ http.post()???

我已经尝试了所有我能记住的组合(当其他一切都失败时......)。尝试使用$_POST$_REQUESTfile_get_contents("php://input")读取POST对象...我已将标头设置为application/jsonapplication/x-www-form-urlencoded; charset=UTF-8。什么都行不通。我可以通过php文件接收数据的唯一方法是对URL中的对象进行编码,但我无法在HTTP请求体中发送它。

注意.config中的序列化函数与JQuery的$ .param()完全相同。我独立测试它,它完美无缺。

0 个答案:

没有答案