获取AngularJS上的$http响应错误状态
我学习AngularJS的一门在线课程,现在正处于学习的第一步 我试图在表单提交后调用API,并根据API响应显示和隐藏一些数据 我首先要做的是检查状态响应,以防它返回500个无效API调用错误。然而,似乎我做不到 我的服务文件的一部分:获取AngularJS上的$http响应错误状态,angularjs,Angularjs,我学习AngularJS的一门在线课程,现在正处于学习的第一步 我试图在表单提交后调用API,并根据API响应显示和隐藏一些数据 我首先要做的是检查状态响应,以防它返回500个无效API调用错误。然而,似乎我做不到 我的服务文件的一部分: service.getMenuItem = function (shortName) { return $http.get(ApiPath + '/menu_items/' + shortName + '.json') .then(fun
service.getMenuItem = function (shortName) {
return $http.get(ApiPath + '/menu_items/' + shortName + '.json')
.then(function successCallback(response) {
return response.data;
}, function errorCallback(response) {
return response.status;
})
};
在我的控制器上:
SignupController.$inject = ['MenuService'];
function SignupController(MenuService) {
var signupCtrl = this;
signupCtrl.submit = function () {
signupCtrl.response = MenuService.getMenuItem(signupCtrl.user.favouritedish);
if ( signupCtrl.response == 500 ) {
signupCtrl.dishError = true;
}
};
}
如果我在$http调用上没有任何错误,那么一切都会正常工作。然而,对于500的错误,它似乎不是。我试图在我的控制器上记录signupCtrl.response
,并且值:500
在那里。但if无法验证
AngularJS上的1.5.8版使用.then()链接方法调用服务函数
SignupController.$inject = ['MenuService'];
function SignupController(MenuService) {
var signupCtrl = this;
signupCtrl.submit = function() {
MenuService.getMenuItem(signupCtrl.user.favouritedish)
.then(function(result) {
console.log(result.data)
}, function(error) {
console.log(error.data)
})
};
}
使用.then()链接方法调用服务函数
SignupController.$inject = ['MenuService'];
function SignupController(MenuService) {
var signupCtrl = this;
signupCtrl.submit = function() {
MenuService.getMenuItem(signupCtrl.user.favouritedish)
.then(function(result) {
console.log(result.data)
}, function(error) {
console.log(error.data)
})
};
}
$http
服务不会返回承诺。它将返回其成功
或错误
的回调函数。因此,您的服务应该如下所示:
function getMenuItem() {
var deferred = $q.defer();
$http.get(serviceBase + '/api/itemId').success(function (result) {
deferred.resolve(result);
}).error(function (err) {
deferred.reject(err.status);
});
return deferred.promise;
}
因此,在本例中,如果成功,您将解决结果。或者,如果失败,您将解析状态
在控制器中,您应该执行以下操作:
SignupController.$inject = ['MenuService'];
function SignupController(MenuService) {
var signupCtrl = this;
signupCtrl.submit = function () {
signupCtrl.response = MenuService.getMenuItem(signupCtrl.user.favouritedish).then(function(response){
//to do if it success
}, function(errorStatus){
signupCtrl.dishError = true;
// to do with the error status
};
}
$http
服务不会返回承诺。它将返回其成功
或错误
的回调函数。因此,您的服务应该如下所示:
function getMenuItem() {
var deferred = $q.defer();
$http.get(serviceBase + '/api/itemId').success(function (result) {
deferred.resolve(result);
}).error(function (err) {
deferred.reject(err.status);
});
return deferred.promise;
}
因此,在本例中,如果成功,您将解决结果。或者,如果失败,您将解析状态
在控制器中,您应该执行以下操作:
SignupController.$inject = ['MenuService'];
function SignupController(MenuService) {
var signupCtrl = this;
signupCtrl.submit = function () {
signupCtrl.response = MenuService.getMenuItem(signupCtrl.user.favouritedish).then(function(response){
//to do if it success
}, function(errorStatus){
signupCtrl.dishError = true;
// to do with the error status
};
}
getMenuItem函数返回的是承诺,而不是解析值。 因此,只需在其上使用“then”,即可检查解析值
MenuService.getMenuItem(signupCtrl.user.favouritedish).then(
function(response) {
if (response === 500) {
signupCtrl.dishError = true;
}
}
);
希望有帮助。
顺便说一句,这段代码可能会让人困惑,因为“500”可能是“response.data”合法响应。
因此,最好不要放置“错误”回调,让调用服务自己处理错误。
e、 g
getMenuItem函数返回的是承诺,而不是解析值。 因此,只需在其上使用“then”,即可检查解析值
MenuService.getMenuItem(signupCtrl.user.favouritedish).then(
function(response) {
if (response === 500) {
signupCtrl.dishError = true;
}
}
);
希望有帮助。
顺便说一句,这段代码可能会让人困惑,因为“500”可能是“response.data”合法响应。
因此,最好不要放置“错误”回调,让调用服务自己处理错误。
e、 g
您当前的响应输出是什么?只是一个数字还是一个对象?@Aer0它是一个对象$$state:Object->status:1和value:500现在还不确定,但是tt可以使用
signupCtrl.response.value
。@Aer0忘了提到我也尝试过它,它返回了未定义的结果。您介意共享一个功能性的小提琴吗?我们可以玩一下?您当前的响应输出是什么?只是一个数字还是一个对象?@Aer0它是一个对象$$状态:对象->状态:1和值:500当前不确定,但是tt可以使用signupCtrl.response.value
then.@Aer0忘了提到我也尝试过它,它返回了未定义的结果。你介意分享一把功能小提琴吗?AngularJS不赞成使用“成功与错误”,get-then是他们文档中唯一建议的方法。是的,兄弟,我们的想法是使用$q服务来回报您的服务承诺。我相信如果你遵循我的答案,它会起作用。AngularJS和get-then不推荐使用success and error,这是他们文档中唯一建议的方法。是的,兄弟,我们的想法是使用$q服务来回报你的服务承诺。我相信如果你按照我的答案去做,它会奏效的。