$ .ajax有效,$ http没有(状态0; CORS?)

时间:2014-12-10 17:21:08

标签: angularjs http

我正在尝试从中下载数据的云服务。我可以使用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所需要的。

response header

所以我完全迷失了如何进一步调试它,因为我在我的应用程序中需要这个功能。但$ http似乎没有表现出它应该如何?

请有人协助并提供指针。

所有错误代码都返回状态:0并且我没有想法为什么?

1 个答案:

答案 0 :(得分:3)

  

获取https://incorrect.myservice.com/ net :: ERR_NAME_NOT_RESOLVED   哪个好 - 这会导致404错误(?)。

不。如果您无法将主机名解析为IP地址,则无法与其建立TCP连接,因此您甚至无法发送HTTP GET,如果您无法发送请求,您无法获得响应,这是404的来源。这是一个较低级别的网络错误,您甚至无法执行任何HTTP,因此您不会获得HTTP状态代码。

这也不是CORS错误。如果CORS出现任何问题,浏览器(至少Chrome)将打印一个非常清晰明确的错误消息。