$http.post 在 AngularJS 中不起作用

Posted

技术标签:

【中文标题】$http.post 在 AngularJS 中不起作用【英文标题】:$http.post not working in AngularJS 【发布时间】:2014-05-26 12:03:05 【问题描述】:

当我使用$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 我的代码可以工作并给出响应。

【问题讨论】:

这个解决方案对我有用***.com/questions/19254029/… 【参考方案1】:
$http(
    method: 'POST',
    url: 'http://mtapi.azurewebsites.net/api/sectiontype',
    dataType: 'json',
    data: SectionTypeId:0, Name: $scope.message,
    headers:  'Content-Type': 'application/json; charset=UTF-8' 
).success(function (data) 
    alert(data);
).error(function (data) 
    alert(data);
);

headers 必须添加到数组的末尾,否则将不起作用。

【讨论】:

【参考方案2】:

我遇到了同样的问题,但我发现 angular http post 方法没有问题,问题出在我试图获取发布数据的地方。

$params = json_decode(file_get_contents('php://input'),true);

我使用此代码从 angular 获取发布的数据,它的工作原理就像一个魅力

【讨论】:

【参考方案3】:

如果您在标题中指定内容类型怎么办,具体如下:

$http(
method: 'POST',
url: '/data/AJAXRequest.php',
data:  mydata: 1, abcd: 2 ,
headers: 'Content-Type': 'application/x-www-form-urlencoded'
).success(....);

专门从这个问题中找到了与 PHP 相关的 cmets:AngularJs $http.post() does not send data

Angular 似乎默认作为 application/json 发送,这可能会混淆 PHP。

【讨论】:

你告诉我它几乎可以工作的方式......我的意思是,如果我设置这样的参数“数据: mydata:1,abcd:2”它不起作用。但如果我使用参数“数据:'mydata=1&abcd=2'”它工作正常。也许我必须在 php 文件中设置 JSON 标头。但无论如何,谢谢。 仅供参考 mydata=1&abcd=2 是序列化数据。您可以让 angular 1.4 自动为您执行此操作,或者您可以使用转换请求功能。如果发现这更容易,那么您可以使用 JQuery 之类的 json 数据。【参考方案4】:

这样发布数据:

$http.post('/data/AJAXRequest.php',  mydata: 1, abcd: 2 )

【讨论】:

我做了但仍然没有工作...我不知道为什么 php 文件显示 en 空消息。如果我使用 $.post jquery 方法它的工作。

以上是关于$http.post 在 AngularJS 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

[Angularjs]$http.post与$.post

使用 Firefox 在 AngularJS 中成功回调 $http.post

AngularJS $http.POST 方法 405 错误

Angularjs $http POST 请求空数组

在 angularjs 中使用 $http.post() 时出现 CORS 问题

使用 AngularJS $http.post 登录 Spring Boot