9

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

4

6 回答 6

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
    });

我对范围表示法有点困惑,但似乎它实际上应该调用错误方法。也许你发现了一个错误。

于 2012-10-26T08:44:51.750 回答
5

有同样的问题,这里没有任何工作。原来我有一个自定义调试拦截器,它没有明确返回 $q.reject(response)。

显然,每个自定义调试拦截器都会完全覆盖默认行为。

有关我在哪里找到答案,请参阅https://github.com/angular/angular.js/issues/2609#issuecomment-44452795 。

于 2014-11-13T12:49:08.103 回答
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 之间的响应不被视为错误。

于 2013-02-27T12:56:21.773 回答
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))
                });
于 2014-05-24T19:40:49.397 回答
0

我从ngResource 文档中复制:

可以使用以下参数调用类对象或实例对象上的操作方法:

  • HTTP GET“类”操作:Resource.action([parameters], [success], [error])
  • 非 GET “类”操作:Resource.action([parameters], postData, [success], [error])
  • 非 GET 实例操作:instance.$action([parameters], [success], [error])

使用 (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 响应。

于 2014-02-25T00:49:50.973 回答
-1

实际上,如果我们遵循文档。有用

 User.save(vm.user, function (response) {
              FlashService.Success('Registration successful', true);
              $location.path('/login');
      },
      function (response) {

          FlashService.Error(response.data);
          vm.dataLoading = false;

      });

以上是我的代码的片段,它可以工作。

于 2015-08-27T05:05:39.720 回答