PHP使用角度';s$http.post()

PHP使用角度';s$http.post(),php,angularjs,Php,Angularjs,我正在尝试使用PHP后端从MySQL数据库检索数据。 使用$http.get()它可以完美地工作。但是当试图发布一些东西时,php文件只会得到一个空数组 我的控制器代码如下: angular .module('TestModule') .controller('TestController', ['$scope', 'TestService', function ($scope, TestService) { TestService.testStuff().success(func

我正在尝试使用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($\u REQUEST,1)
它只返回
Array()
,这有点奇怪

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

从我做过的四千七百二十九次谷歌搜索(大部分都是把我带回这里的),没有任何效果。我试图更改头,使用其他格式执行post请求,
$http({method:…})例如,没有运气。我知道我遗漏了一些真正的基本点,但我就是不知道它是什么

谢谢你可能提供的任何帮助

编辑: 我确实看到并试过了。建议的解决方案对我不起作用(我得到一个空字符串作为响应)。事实上,所有的解决方案都不起作用。。我快疯了。$\u POST的内容始终为空字符串。$\u请求是一个空数组

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

我已经尝试了我能记得的所有组合(当其他一切都失败时…)。试图用
$\u POST
$\u REQUEST
file\u get\u内容读取POST对象(“php://input)
。。。我已将标题设置为
application/json
application/x-www-form-urlencoded;字符集=UTF-8
。什么都不管用。php文件接收数据的唯一方法是在URL中编码对象,但不能在HTTP请求体中发送


注意
.config
中的serialize函数与JQuery的$.param()完全相同。我独立地对它进行了测试,它工作得完美无缺。

如果你真的需要使用post。。。。还可以设置默认标题并使用
$httpinterceptors
修改数据,修改方式与jQuery
$.param当前的工作方式相同。数据正在正确处理,但php文件无法获取数据。甚至不用邮递员。但是,它是正确的文件,因为它回复了我设置的内容…当前正在做什么?您是在使用
文件\u get\u contents()
还是转换为表单编码的帖子?我已经尝试了这两种方法。目前,我使用$httpProvider通过
$.param
的普通JS实现来修改数据(还使用jQuery版本进行了测试,并比较了两个输出,这两个输出是相同的,只是为了确定)。我正在执行一个
$http.post(url,数据)到php文件。php文件被调用,但无论是带有
$\u POST
还是
文件\u get\u内容('php://input)
。建议使用当前代码尝试更新问题。另外…在浏览器的“开发工具”“网络”选项卡中检查实际请求本身,以查看是否确实需要使用post。。。。还可以设置默认标题并使用
$httpinterceptors
修改数据,修改方式与jQuery
$.param当前的工作方式相同。数据正在正确处理,但php文件无法获取数据。甚至不用邮递员。但是,它是正确的文件,因为它回复了我设置的内容…当前正在做什么?您是在使用
文件\u get\u contents()
还是转换为表单编码的帖子?我已经尝试了这两种方法。目前,我使用$httpProvider通过
$.param
的普通JS实现来修改数据(还使用jQuery版本进行了测试,并比较了两个输出,这两个输出是相同的,只是为了确定)。我正在执行一个
$http.post(url,数据)到php文件。php文件被调用,但无论是带有
$\u POST
还是
文件\u get\u内容('php://input)
。建议使用当前代码尝试更新问题。另外…在浏览器的“开发工具”“网络”选项卡中检查实际请求本身,以准确查看发送的内容