AngularJS - $http get 返回状态为 0 的错误?

Posted

技术标签:

【中文标题】AngularJS - $http get 返回状态为 0 的错误?【英文标题】:AngularJS - $http get returns error with status 0? 【发布时间】:2015-01-24 13:16:12 【问题描述】:

我有一个 AngularJS 应用程序,我在其中尝试使用 $http 从服务器获取 XML 数据,例如 http://example.com/a/b/c/d/getDetails?fname=abc&lname=def(当通过在浏览器中输入链接手动访问时,会显示 XML 的树形结构文件)。

当我运行应用程序时,不会从该链接获取数据。相反,它显示 status 0 的错误。

//url = http://example.com/a/b/c/d/getDetails?fname=abc&lname=def
$http.get(url).success(function (data)
                alert("Success");
                deferred.resolve(data);
            ).error(function (data, status)
                console.log("Error status : " + status);
            );

我不知道为什么 $http.get 失败并进入错误函数返回状态 0。

但是,如果我将 URL 传递给具有 JSON 对象的本地服务器,它就可以工作。

问题是因为我试图从不同的域访问 XML 文件(CORS 问题?)还是其他原因?

请帮帮我!

【问题讨论】:

是的,看看你的控制台,你应该有一个错误(Cross Origin ...) 不。我的控制台中没有类似的东西。 如果我不想通过控制台记录错误但将其返回到 DOM 怎么办? 【参考方案1】:

您有HTTP access control (CORS) 问题。

响应您的 REST 请求的服务器必须包含 CORS 指定的标头,以允许 Angular 正确使用响应。本质上,这意味着在您的响应中包含 Access-Control-Allow-Origin 标头,指定允许的请求来自的服务器。 (ref)

指令Angular 允许获取/设置用于确保用于采购Angular 模板的URL 安全的白名单和黑名单。

【讨论】:

如果我将用于访问 XML 数据的链接列入白名单就足够了吗? 如果你使用 xmlhttprequests 你需要 JSONpadding。但是,服务器必须支持“跨域资源共享 (CORS)”,这样才能从其他域接收数据非常简单。【参考方案2】:

是的,你没看错,因为 $http 的默认内容类型是“application/json”,如果你想更改请求数据或响应数据,你可以在 tranformRequest 和 tranformResponse 的帮助下进行更改。你可以找到更多关于它的信息here

我还找到了一篇关于实现 tranformRequest change post data from json to form post in angularjs的文章

【讨论】:

谢谢。那么对于我使用transformRequest后的应用程序,我应该使用xml2json将xml内容转换为JSON并使用它吗? (rabidgadfly.com/2013/02/angular-and-xml-no-problem) 或者还有其他更好的解决方案吗? 您的链接正在重定向到垃圾网站

以上是关于AngularJS - $http get 返回状态为 0 的错误?的主要内容,如果未能解决你的问题,请参考以下文章

在 AngularJS 中缓存 HTTP 'Get' 服务响应?

$ http get使用AngularJS返回html而不是JSON Object Spring Security

HTTP常用状代码

AngularJS:POST请求返回302后发送的GET请求用于登录

AngularJS 工厂 http 返回空

在AngularJs中从控制器调用服务时,从$ get factory方法返回一个值