AngularJS服务不在save()方法上调用错误回调

时间:2012-10-26 04:46:06

标签: javascript rest angularjs

所以我正在使用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传递给定义的提交函数。那么为什么没有调用此错误回调的问题是什么?

5 个答案:

答案 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响应。