angularjs拦截器:为啥在$http拦截器中没有收到正确的状态码和消息

Posted

技术标签:

【中文标题】angularjs拦截器:为啥在$http拦截器中没有收到正确的状态码和消息【英文标题】:angularjs Interceptor:why is it not receiving the proper status code and message in $http interceptorangularjs拦截器:为什么在$http拦截器中没有收到正确的状态码和消息 【发布时间】:2015-09-28 20:40:47 【问题描述】:

我正在使用$http 发出一个简单的get 请求。它失败并出现503-service unavailable 错误,这清楚地显示在网络选项卡中。但是responseError 拦截器对象中的rejection 对象显示status: 0

这是我的拦截器

angular.module("app", []).config(function($httpProvider)
$httpProvider.interceptors.push(function($q) 
  return 
   'responseError': function(rejection) 
       console.log(rejection);
    
  
)
);

我期待拦截器中的状态代码503,但我收到0。请帮助我理解并解决问题。

Here 是一个说明问题的小提琴。

请求是跨域请求。

【问题讨论】:

你看过***.com/questions/28257824/… 吗?看起来它与您运行代码的环境有关。 @MattHerbstritt 这与我正在处理的问题相同,只是无论环境如何,小提琴都不起作用。 【参考方案1】:

您使用的服务确实会返回任何数据。 Angular $http 期望返回一些数据,在这种情况下,“GetStatusCode”只是停止并且不返回任何内容。

另外,仅供参考 - 您的小提琴不尊重 angular 绑定到控制器的方法,它需要一个字符串作为控制器名称。

请参阅http://plnkr.co/edit/x46D5FIsgaKsaSocYjpz?p=preview 以获得正确的标记。我们将控制器命名为字符串,例如:

angular.module("plunker", [])

    .config(function ($httpProvider) 
        $httpProvider.interceptors.push(function () 
            return 
                'responseError': function (rejection) 
                    console.log('rejection = ', rejection);
                ,
                'response': function (response) 
                    console.log('response = ', response);
                
            
        )
    )

    .controller('Controller', function Controller($scope, $http) 
        $scope.getCode = function () 
            var req = 'http://www.reddit.com/r/catpictures.json?limit=50&jsonp=JSON_CALLBACK';
            return $http.jsonp(req);
        ;
        $scope.get = function () 
            return $scope.getCode()
        ;
    )
;

【讨论】:

以上是关于angularjs拦截器:为啥在$http拦截器中没有收到正确的状态码和消息的主要内容,如果未能解决你的问题,请参考以下文章

使用 AngularJS 拦截器阻止 HTTP 基本身份验证对话框

如何使用angularJS拦截器只拦截特定的http请求?

关于angularJs的拦截器的使用

Angularjs注入拦截器实现Loading效果

在 angularjs 拦截器中停止请求

在 AngularJS 中的 $http 请求期间显示微调器 GIF?