如何使用Angular JS拦截每个Ajax请求

时间:2015-08-07 14:37:56

标签: javascript jquery ajax angularjs

我需要拦截每个Ajax请求以验证服务器是否以401 Unauthorized响应,因为会话已过期并重定向到登录页面,因此用户不认为该应用程序停止工作。我可以使用JQuery以下方式执行此操作:

$( document ).ajaxComplete(function( event, xhr, settings ) {
   if(xhr.errorCode == 401 || xhr.responseText === "unauthorized") {
    location.href = "/Login";
   }
});

如何使用Angular JS执行此操作?

3 个答案:

答案 0 :(得分:2)

您可以在应用程序config()

上设置$ interceptor
        .config(['$httpProvider', function($httpProvider) {
        $httpProvider.interceptors.push(['$location', '$q',  function($location, $q) {
            return {
                'request': function(request) {    
                    return request;
                },
                'responseError': function(response) {
                    if (response.status === 401) {
                        // do stuff
                    }
                    // otherwise, default behaviour
                    return $q.reject(response);
                }
            };
        }]);
    }])

答案 1 :(得分:0)

使用httpInterceptor。很久以前的问题是answered。然后,您应该对'response' hanndler感兴趣并在那里添加您的特定逻辑。

答案 2 :(得分:-1)

制作一个用于拨打所有电话的功能,您只需要在一个地方处理错误而不是很多

function makeCall(obj, cb) {
    $http({
        method: obj.method,
        url: obj.url,
        data: obj.data || {}
    }, function(res) {
        // non error statuses get handled here
    }, function(res) {
        // error statuses get handled here
    })
}