所以我正在使用angularjs restful service $ resource而且我正在调用$ save函数。但是,我传递给它的错误回调没有被调用。服务器发送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传递给定义的提交函数。那么为什么没有调用此错误回调的问题是什么?
答案 0 :(得分:8)
我在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
});
我对范围表示法感到困惑,但它似乎应该实际调用错误方法。也许你发现了一个错误。
答案 1 :(得分:5)
有同样的问题,这里没有任何工作。原来我有一个自定义的调试拦截器没有显式返回$ q.reject(响应)。
显然,每个自定义调试拦截器都会完全覆盖默认行为。
请参阅https://github.com/angular/angular.js/issues/2609#issuecomment-44452795我找到答案的位置。
答案 2 :(得分:4)
我也遇到了错误回调问题,但似乎在更新版本的AngularJS中,错误回调方法现在必须实现如下:
SomeResource.query({}, angular.noop, function(response){
$scope.status = response.status;
});
来源+更详细的说明:https://groups.google.com/d/msg/angular/3Q-Ip95GViI/at8cF5LsMHwJ
另外,回应对Flek帖子的评论,现在似乎只有200到300之间的回复不被视为错误。
答案 3 :(得分:2)
我无法获得Alter的工作答案,但这对我有用:
user.$save(function (user, headers) {
// Success
console.log("$save success " + JSON.stringify(user));
}, function (error) {
// failure
console.log("$save failed " + JSON.stringify(error))
});
答案 4 :(得分:0)
我正在复制ngResource documentation:
类对象或实例对象上的操作方法可以是 使用以下参数调用:
- HTTP GET“class”操作:Resource.action([parameters],[success],[error])
- 非GET“类”操作:Resource.action([parameters],postData,[success],[error])
- 非GET实例操作:实例。$ action([参数],[成功],[错误])
使用(value,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响应。