我的$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()
.
您可以使用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
功能.