1. ホーム
  2. javascript

[解決済み] AngularJSによるグローバルAjaxエラーハンドラ

2023-07-28 09:35:37

質問

私のサイトが100%jQueryだったころは、こんなことをしていました。

$.ajaxSetup({
    global: true,
    error: function(xhr, status, err) {
        if (xhr.status == 401) {
           window.location = "./index.html";
        }
    }
});

で、401エラーのグローバルハンドラを設定します。現在、私はangularjsで $resource$http を使用してサーバーに私の(REST)要求を行います。同様にangularでグローバルエラーハンドラを設定する方法はありますか?

どのように解決するのですか?

私もangularでサイトを作っているのですが、グローバル401の処理でこれと同じ障害に遭遇しました。私はこのブログ記事を見つけたとき、httpインターセプターを使うことにしました。もしかしたら、あなたも私と同じように役に立つかもしれません。

"AngularJS(または類似の)ベースのアプリケーションでの認証.".AngularJS(または類似の)ベースのアプリケーションでの認証; , エスペオソフトウェア

EDIT: 最終的な解決策

angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives'], function ($routeProvider, $locationProvider, $httpProvider) {

    var interceptor = ['$rootScope', '$q', function (scope, $q) {

        function success(response) {
            return response;
        }

        function error(response) {
            var status = response.status;

            if (status == 401) {
                window.location = "./index.html";
                return;
            }
            // otherwise
            return $q.reject(response);

        }

        return function (promise) {
            return promise.then(success, error);
        }

    }];
    $httpProvider.responseInterceptors.push(interceptor);