我正在尝试使用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
,$_REQUEST
,file_get_contents("php://input")
读取POST对象...我已将标头设置为application/json
或application/x-www-form-urlencoded; charset=UTF-8
。什么都行不通。我可以通过php文件接收数据的唯一方法是对URL中的对象进行编码,但我无法在HTTP请求体中发送它。
注意:.config
中的序列化函数与JQuery的$ .param()完全相同。我独立测试它,它完美无缺。