当我使用$http.get我的代码时,但是如果我使用$ http.post,则永远不会将参数获取到请求.php文件中。
$http.get
这是服务功能:
TestPanel.service('MySampleService', function ($http, $q) { this.getAllPosts = function () { var def = $q.defer(); $http.post('/data/AJAXRequest.php', 'mydata=1&abcd=2').success(function (data) { if (data == null) def.reject('ERROR: DATA IS NULL'); else if (data.HasError) def.reject('ERROR: ' + data.Message); else def.resolve(data); }).error(function () { def.reject('ERROR: Sorry, unable to complete your request.'); }); return def.promise; } });
和控制器功能:
TestController.controller('PostCtrl', ['$scope', '$http', 'MySampleService', function ($scope, $http, MySampleService) { function FetchPostsList() { MySampleService.getAllPosts().then(function (data) { $scope.lstPosts = data.ResponseData; $scope.totalRecords = data.totalRecords; console.info('DATA=' + $scope.lstPosts); }, function (err) { console.info('err=' + err); }); } FetchPostsList(); } ]);
和我的AJAXRequest.php文件
<?php var_dump($_POST) ?>
如果我使用 $ http.post()
输出 :
array (size=0) empty
如果我使用 $ http.get(), 我的输出是:
array (size=2) 'mydata' => string '1' (length=1) 'abcd' => string '2' (length=1)
我检查了FireBug工具中的帖子,该帖子将数据发送到我的php文件中。但PHP文件没有参数。
如果我使用 $ .ajax 或 $ .post 我的代码工作,它会给出响应。
如果您在标头中指定内容类型怎么办,特别是这样:
$http({ method: 'POST', url: '/data/AJAXRequest.php', data: { mydata: 1, abcd: 2 }, headers: {'Content-Type': 'application/x-www-form-urlencoded'} }).success(....);
找到了与PHP有关的注释,专门针对此问题:AngularJs $http.post()不发送数据 看来Angular默认以application / json的形式发送,这可能会使PHP感到困惑。