PHP使用角度';s$http.post()
我正在尝试使用PHP后端从MySQL数据库检索数据。 使用$http.get()它可以完美地工作。但是当试图发布一些东西时,php文件只会得到一个空数组 我的控制器代码如下: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
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)
。建议使用当前代码尝试更新问题。另外…在浏览器的“开发工具”“网络”选项卡中检查实际请求本身,以准确查看发送的内容