AngularJS $ http.post()触发获取请求而不是发布

时间:2015-10-08 13:54:18

标签: javascript angularjs api http

我在角度和laravel中构建一个API服务,当我向API发送GET调用时,Everythings工作正常,但是当我触发POST调用时,服务仍然使用GET方法而不是POST。 那是我的服务:

function LeadsAPI($http,$q,BASE_URL)
{
   this.updateLead = function (lead_data) {
        var url = BASE_URL+"/leads/update/";
        var deferred = $q.defer();
        $http.post(url , lead_data).then(function(response){
            deferred.resolve(response.data);
        });
        return deferred.promise;
    }
}

我从控制器调用此函数:

LeadsController.$inject = ['$scope', 'LeadsAPI'];
function LeadsController($scope , LeadsAPI)
{
  LeadsAPI.updateLead({'lead_id' : res._id, 'the_lead': {'fist_name' : 'asd asd'}}).then(function (res) {
            console.log(res);
        });
}

我尝试将参数作为字符串传递(" a = b& c = d ...")并添加标题:

$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
在我的App模块实例化的run函数中

但是,我一直收到405 (Method Not Allowed)错误。 任何想法为什么以及如何解决它?非常感谢你们! :)

3 个答案:

答案 0 :(得分:7)

似乎这个问题很老而且没有答案,但Google引导我到这里来。我希望有人会觉得这个答案很有用。

我遇到了同样的问题。 $ http设置为POST但服务器从GET请求返回错误。

检查Web检查器中的标题后,它显示浏览器实际上发出了两个请求:

update/ 301     text/html   angular.js:11442        
update  405     xhr         https://test.site/post/update

第一个是$ http中的一个,第二个是重定向后的。 如您所见,尾随斜杠URL被重定向到非尾随URL。通过此重定向,POST请求也会更改为GET。

解决方案是将您的请求网址更改为不包含尾部斜杠:

url: BASE_URL+"/leads/update",

答案 1 :(得分:0)

GET工作得很好......很好 POST返回405 - 不允许方法 听起来它正在进行POST,而您发布的服务器不支持对有问题的端点的POST请求

是否可以提供更多信息,例如发出GET请求时的HTTP请求和响应标头以及POST请求的相同信息

您可以通过Firefox的Firebug或Chrome控制台中的NET标签访问标题信息

答案 2 :(得分:0)

  1. 确保您的API方法已准备好处理POST请求。也许Angular实际上是在发出一个POST请求,但你的方法是期待一个GET。

  2. 如果您确定Angular由于某种原因确实正在触发GET请求而不是POST,请尝试在$ http对象上显式设置HTTP方法:

    $http({
       method: 'POST',
       url: BASE_URL+"/leads/update/",
       data: lead_data
    }).then(function (response) {
       deferred.resolve(response.data);
    });