9

だから私はangularjsの安らかなサービス$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 に答える