当前位置:  开发笔记 > 编程语言 > 正文

AngularJS捕获$ http操作的所有状态代码?

如何解决《AngularJS捕获$http操作的所有状态代码?》经验,为你挑选了1个好方法。

我的$http函数可以返回以下错误:

POST http://foobar.dev/foobar 500(内部服务器错误)

POST http://foobar.dev/foobar 401(未经授权)

有没有办法可以捕获所有状态代码?

$http.post('/foobar', form)
    .success(function(data, status, headers, config) {
        console.info(data);
    })
    .error(function(data, status, headers, config) {
        console.error(data);
        if(status === 401) {
            $scope.setTemplate('show-login');
        }
        if(status === 500) {
            $scope.setTemplate('server-error');
        }
    }
);  

$scope.setTemplate()Controller中设置视图的函数在哪里.

但是我必须为每个error()函数执行此操作,并且有很多这样的函数也没有使它成为DRY代码:P

我想要的是捕获错误并根据错误中返回的状态代码执行操作.

仅供参考:我没有使用Angulars $routeProvider().



1> Shashank Agr..:

您可以使用Angular $http拦截器,如@Dalorzo解释:

var myApp = angular.module("myApp", [], ['$httpProvider', function($httpProvider) {

    $httpProvider.interceptors.push(['$rootScope', '$q', function($rootScope, $q) {
        return {
            'responseError': function(response) {
                var status = response.status;
                // Skip for response with code 422 (as asked in the comment)
                if (status != 422) {
                    var routes = {'401': 'show-login', '500': 'server-error'};
                    $rootScope.$broadcast("ajaxError", {template: routes[status]});
                }

                return $q.reject(response);
            }
        };
    }]);
});

然后在您的控制器中接收它:

$scope.$on("ajaxError", function(e, data) {
    $scope.setTemplate(data.template);
});

现在,您无需输入每个error功能.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有