[英]AngularJS $http.post() firing get request instead of post
我在角度和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)
错误。 任何想法为什么以及如何解决它? 非常感谢你们! :)
似乎问题是陈旧的,没有答案,但谷歌带领我在这里。 我希望有人会觉得这个答案很有用。
我有同样的问题。 $ 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更改为不包含尾部斜杠:
url: BASE_URL+"/leads/update",
GET工作正常...好POST返回405 - 方法不允许听起来它正在进行POST而你发布的服务器不支持对相关端点的POST请求
您能否提供更多信息,例如发出GET请求时的HTTP请求和响应标头,以及POST请求的相同信息
您可以通过Firefox的Firebug或Chrome控制台中的NET选项卡访问标题信息
确保您的API方法已准备好处理POST请求。 也许Angular实际上是在发出一个POST请求,但你的方法是期待一个GET。
如果您确定Angular由于某种原因确实正在触发GET请求而不是POST,请尝试在$ http对象上显式设置HTTP方法:
$http({ method: 'POST', url: BASE_URL+"/leads/update/", data: lead_data }).then(function (response) { deferred.resolve(response.data); });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.