使用AngularJS返回xml的跨域ajax请求
Posted
技术标签:
【中文标题】使用AngularJS返回xml的跨域ajax请求【英文标题】:Cross domain ajax request that returns xml using AngularJS 【发布时间】:2013-08-16 21:33:46 【问题描述】:我正在尝试使用 AngularJs 连接到 answerbase api。我让它使用 jsonp 返回 xml,但出现格式错误。不幸的是,xml 是他们将返回的唯一格式。我试图使用 xml2json 库但没有成功。 这是我目前所拥有的。
var url = "http://myAnswerBaseSite.com/api/getquestionslist.aspx?apikey=myKey&callback=JSON_CALLBACK";
$http.jsonp(url,
transformResponse: function (data)
var x2js = new X2JS();
var json = x2js.xml_str2json(data);
return json;
)
.success(function (data)
console.log(data.found);
);
这可能吗? 提前致谢
【问题讨论】:
【参考方案1】:如果无法访问您正在使用的相同服务,就很难确定问题所在。您使用的是公共 API 吗?
我能够使用$http.get
获得基本的演示。看看this plunker。
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope, $http)
$scope.name = 'World';
var url = "data.xml";
$http.get(url,
transformResponse: function (data)
var x2js = new X2JS();
var json = x2js.xml_str2json(data);
return json;
).success(function (data)
$scope.foo = data.foo;
);
);
【讨论】:
如果 xml 是本地的,则此方法有效。由于它是一个跨域请求,我得到“访问控制允许来源不允许本地主机”错误。所以我需要使用 jsonp 之类的东西,但用于 xml。谢谢 如果您尝试在 Chrome 中通过 localhost 进行跨域请求,它将失败。您需要在禁用安全性的情况下打开 Chrome(open -a Google\ Chrome --args --disable-web-security)。否则,您需要确保已为 CORS 正确配置服务,或者您可以继续使用 JSONP 路由。我将尝试让 JSONP 在演示中工作。 我支持 CORS 评论。 @moderndegree- 谢谢,我不认为在 chrome 中禁用它是一种选择,我需要它为每个人工作。关于 API 的文档不多,但我正在向支持团队发送电子邮件询问 CORS。我会猜测并说它可能没有为 CORS 配置。谢谢, 好吧...在这种情况下,我建议在您自己的服务器上创建一个代理服务,然后转换响应服务器端。【参考方案2】:这里也一样。不幸的是,jsonp 函数在转换回调之前解析内容。所以不,这是不可能的。
您只能将响应更改为 JSON 或使用其他方法。 (嗯,你也可以在你的服务器上封装真实的 API 并以 JSON 格式生成相同的结果,构建一个镜像 API 服务)
祝你有美好的一天,
【讨论】:
以上是关于使用AngularJS返回xml的跨域ajax请求的主要内容,如果未能解决你的问题,请参考以下文章