AngularJS $ http.post()触发get请求而不是post

ben*_*jah 3 javascript api http angularjs

我在角度和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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我从控制器调用此函数:

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);
        });
}
Run Code Online (Sandbox Code Playgroud)

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

$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
Run Code Online (Sandbox Code Playgroud)

run我的应用程序模块实例化的功能,但是,我不断收到405 (Method Not Allowed)错误.任何想法为什么以及如何解决它?非常感谢你们!:)

J. *_*ong 8

似乎问题是陈旧的,没有答案,但谷歌带领我在这里.我希望有人会觉得这个答案很有用.

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

检查Web检查器中的标头后,它显示浏览器实际上执行了两个请求:

update/ 301     text/html   angular.js:11442        
update  405     xhr         https://test.site/post/update
Run Code Online (Sandbox Code Playgroud)

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

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

url: BASE_URL+"/leads/update",
Run Code Online (Sandbox Code Playgroud)