【问题标题】:angularjs $http always return -1 with response status 404angularjs $http 总是返回 -1 响应状态为 404
【发布时间】:2017-08-10 04:33:06
【问题描述】:

我在 angular $http 中发现了一个奇怪的问题。

我的请求代码

  $http({
        method: 'GET',
        url: 'http://localhost:8080/server/'
    }).then(function (response) {
      console.log(response.status);
    },function(response){
      console.log(response.status);
    });

在此之前,我设置了请求头

app.factory('myInterceptor', ['$q', function($q) {
        return {
            request: function(config) {
                config.headers['Authorization'] = 'Basic *';
                return config;
            },
            requestError: function(rejectReason) {
                return $q.reject(rejectReason);
            },
            response: function(response) {
                return $q.resolve(response);
            },
            responseError: function(response) {
                console.log(response.status);
                return $q.reject(response);
            }
        };
    }])
    .config(['$httpProvider', function($httpProvider) {
        $httpProvider.interceptors.push('myInterceptor');
    }]);

这个页面不存在,所以它应该返回404,但它返回-1。

如果删除此行config.headers['Authorization'] = 'Basic *';,则返回正确的404。

谁能帮帮我,这是我的演示页面http://plnkr.co/edit/GhghMNCPcITwXCINISW5?p=preview,非常感谢

【问题讨论】:

  • Angular HTTP: Status -1的可能重复
  • 您确定您的服务器返回 404 吗?检查网络面板以获取服务器返回的状态代码。很可能连接超时,服务器没有响应状态码。
  • 浏览器地址栏中的网址是什么?
  • @NikhilBhandari 是的,我确定,我的 chrome 返回 404,但 console.log 在角码中返回 -1。
  • 这不能回答我的问题。这是一个简单的问题,而且很重要,因为它可能是一个 CORS 问题。你为什么不直接回答?通过查看您的 plunkr,我无法知道答案。您的服务器可能启用了 CORS,但未授权 Authorization 标头。

标签: angularjs angular-http


【解决方案1】:

您提出请求的 URL 有问题。

可以通过如下更新 http 回调来判断:

app.controller('MainCtrl', function($scope, $http) {
  $scope.name = 'angular'
  $http({
    method: 'GET',
    url: 'https://cloudzone.eicp.net:8155/server/'
  }).success(function(response) {
    console.log(response.status);
  }).error(function(response) {
    console.log(response.status);
  });
});

你会看到服务器既没有返回成功也没有返回错误,它只是在超时。 请检查服务器的可用性。

建议:尝试一些实用程序,例如谷歌浏览器中的“邮递员”,看看你得到了什么结果。

【讨论】:

  • .success 方法不会将状态作为响应对象的属性返回。 已弃用方式:$http(...).success(function onSuccess(data, status, headers, config)。见Why are angular $http success/error methods deprecated? Removed from v1.6?
  • @Harsh 谢谢你的回答。我一直在测试。
  • @georgeawg 很好,我建议测试服务器的可用性;如果 URL 实际响应请求。
猜你喜欢
  • 1970-01-01
  • 2022-11-26
  • 2016-02-04
  • 2015-04-28
  • 1970-01-01
  • 2015-01-09
  • 2019-03-15
  • 1970-01-01
  • 2017-01-18
相关资源
最近更新 更多