我正在尝试从中下载数据的云服务。我可以使用jQuery的$.ajax
函数来获取这些数据而不会出现任何问题 - 返回所有预期的状态代码。
AngularJS是一个不同的故事,我不知道为什么。我使用$ http服务来get(...)
我的数据。我知道$ http可能会失败的一些错误(如果用户在注册框中输入错误的内容,则为404;如果未通过身份验证,则为403)。
然而,无论我尝试什么 - 我每次都会收到一个status: 0
回复,这是你无法想象的那么无用。
我有一个基本功能如下:
function get(config) {
$ionicLoading.show();
return $http(config)
.then(function (data) {
console.log(data);
return data.data;
},
function (data) {
console.log(data);
throw 'Connection error';
})
.finally(function () {
$ionicLoading.hide();
}
);
}
我用它来测试我的一个云服务的连接。
哪个好;但是 - 如果我为我的服务传递了一个不正确的子域名,例如incorrect.myservice.com - 我收到以下错误:
GET https://incorrect.myservice.com/ net::ERR_NAME_NOT_RESOLVED
哪个好 - 这会导致404错误(?)。
但是,错误回调中返回的数据是:
Object {data: "", status: 0, headers: function, config: Object, statusText: ""}
哪个不好 - 它应该不是0?它应该是404.我做了一些研究,似乎CORS在AngularJS $ http中有点令人头疼。
但是,根据我的阅读 - 看来我的服务器上启用了CORS,因为查看了Fiddler / Chrome / IE等中的响应,所有回复都返回Access-Control-Allow-Headers: *
和Access-Control-Allow-Headers: *
这是CORS所需要的。
所以我完全迷失了如何进一步调试它,因为我在我的应用程序中需要这个功能。但$ http似乎没有表现出它应该如何?
请有人协助并提供指针。
所有错误代码都返回状态:0并且我没有想法为什么?
答案 0 :(得分:3)
获取https://incorrect.myservice.com/ net :: ERR_NAME_NOT_RESOLVED 哪个好 - 这会导致404错误(?)。
不。如果您无法将主机名解析为IP地址,则无法与其建立TCP连接,因此您甚至无法发送HTTP GET,如果您无法发送请求,您无法获得响应,这是404的来源。这是一个较低级别的网络错误,您甚至无法执行任何HTTP,因此您不会获得HTTP状态代码。
这也不是CORS错误。如果CORS出现任何问题,浏览器(至少Chrome)将打印一个非常清晰明确的错误消息。