为什么我无法从Angular $ http.get获取error.status和error.statusText。错误回应?

时间:2017-01-15 13:52:54

标签: angularjs

我在角度控制器中有一个看起来像这样的函数:

$http.get(dataUrl)
        .then(function (response) { // success getProducts
            $scope.data.products = response.data;
        })
        .catch(function (error) {
            $scope.data.error = error;
        });

dataUrl是一个常量,当正确返回产品列表时,一切正常。 接下来我想测试错误处理。 所以我将dataUrl更改为错误的端口号以获取我的数据。 现在我的错误div显示和我的内容div隐藏。 这是正确的功能。

这是我的问题。 在我显示error.status的div中,它返回-1。我跟随的例子说它应该是404.我的statusText也是空的或“”。 为什么我的错误对象没有填充任何内容。

我最初设置了错误函数作为then()的第二个回调。 但是无论哪种方式都得到相同的结果,我认为catch()更清晰,就像在堆栈上的另一个帖子中所提到的那样。

2 个答案:

答案 0 :(得分:0)

来自https://docs.angularjs.org/api/ng/service/ $ http

  

200到299之间的响应状态代码被视为成功   status并将导致调用成功回调。任何   超出该范围的响应状态代码被视为错误   status并将导致调用错误回调。也,   小于-1的状态代码归一化为零。 -1通常意味着   请求已中止,例如使用config.timeout。注意,如果   响应是重定向,XMLHttpRequest将透明地遵循它,   意味着结果(成功或错误)将由决定   最终答复状态代码。

答案 1 :(得分:0)

正确的网址是:" http://localhost:5125/products" (如:

angular.module("sportsStore")
.constant("dataUrl", "http://localhost:5125/products1")
.controller("sportsStoreCtrl", function ($scope, $http, dataUrl) {

    $scope.data = {};

    $http.get(dataUrl)
        .then(function (response) { // success getProducts
            $scope.data.products = response.data;
        })
        .catch(function (error) {
            $scope.data.error = error;
        });

});

如果我将其更改为:" http://localhost:5000/products",则ajax请求不再进入网络服务器,因为它无法找到在端口5000上提供产品集合的deployd。所以评论来自JB Nizet的说法是正确的。 没有服务器要发送回404或500,因此默认状态必须为-1,默认statusText必须为""。

但是,如果我尝试这个:http://localhost:5125/products1,那么ajax请求会找到deployd,但会发回404,因为没有products1集合或products1 API,因此没有product1集合的get方法。因此,在这种情况下,deployd发回404:

404 error