我在角度控制器中有一个看起来像这样的函数:
$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()更清晰,就像在堆栈上的另一个帖子中所提到的那样。
答案 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: