所以我使用angularjs RESTful服务$资源,我调用$保存功能。 然而,错误回调我传递给它不会被调用。 该服务器发送一个418错误,我想因为它不是200将导致被调用错误回调。 但是,这不可能发生。 我无法找到任何文件说明将导致错误回调哪些HTTP错误代码被调用。
这里是我的代码:
var modalScope = $scope.$new();
modalScope.showPassword = false;
modalScope.message = null;
modalScope.user = new User();
modalScope.submit = function(user) {
user.$save( {}, function(data,headers) {
// do the success case
}, function(data,headers) {
// do the error case
});
};
该modalScope.user被传递给定义的提交功能。 那么,什么是为什么这个错误回调不会被调用的问题?
Answer 1:
我发现在ngResource源代码如下
$http({method: 'GET', url: '/someUrl'}).
success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with status
// code outside of the <200, 400) range
});
我有点困惑的范围标识,但似乎它实际上应该调用错误方法。 也许你发现了一个bug。
Answer 2:
有同样的问题,并没有在这里工作。 原来我有一个自定义调试拦截未明确返回$ q.reject(响应)。
显然,每一个自定义调试拦截导弹完全覆盖的默认行为。
见https://github.com/angular/angular.js/issues/2609#issuecomment-44452795为在那里我找到了答案。
Answer 3:
我有错误回调麻烦为好,但现在看来,在新的版本AngularJS的,错误回调方法现在必须实现这样的:
SomeResource.query({}, angular.noop, function(response){
$scope.status = response.status;
});
来源+更详细的描述: https://groups.google.com/d/msg/angular/3Q-Ip95GViI/at8cF5LsMHwJ
此外,在回答关于Flek的文章的评论,似乎现在只有200和300之间的反应不被认为是一个错误。
Answer 4:
我不能让Alter公司的答复工作,但这个工作对我来说:
user.$save(function (user, headers) {
// Success
console.log("$save success " + JSON.stringify(user));
}, function (error) {
// failure
console.log("$save failed " + JSON.stringify(error))
});
Answer 5:
我是从拷贝ngResource文档 :
类对象或实例对象上的动作的方法可以用下面的参数来调用:
- HTTP GET “类” 动作:Resource.action([参数],[成功],[错误])
- 非GET “类” 动作:Resource.action([参数],POSTDATA,[成功],[错误])
- 非GET实例动作:例如$行动([参数],[成功],[错误])
成功回调被调用(值,responseHeaders响应)参数。 错误回调被调用(类HTTPResponse)的说法。
$save
被视为非GET“下课”的行动,所以你必须使用一个额外的postData
参数。 使用同样的问题例如,这应该工作:
modalScope.submit = function(user) {
user.$save( {}, {}, function(data,headers) {
// do the success case
}, function(response) {
// do the error case
});
};
保持对错误回调的眼睛,用例相比,与只有一个参数调用,这使所有的HTTP响应。
Answer 6:
其实,如果我们遵循的文档。 有用
User.save(vm.user, function (response) {
FlashService.Success('Registration successful', true);
$location.path('/login');
},
function (response) {
FlashService.Error(response.data);
vm.dataLoading = false;
});
以上是从我的代码它的工作原理剪断。
文章来源: AngularJS service not invoking error callback on save() method