一尘不染

$ http.post在AngularJS中不起作用

angularjs

当我使用$http.get我的代码时,但是如果我使用$ http.post,则永远不会将参数获取到请求.php文件中。

这是服务功能:

    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 我的代码工作,它会给出响应。


阅读 248

收藏
2020-07-04

共1个答案

一尘不染

如果您在标头中指定内容类型怎么办,特别是这样:

$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感到困惑。

2020-07-04