使用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请求的主要内容,如果未能解决你的问题,请参考以下文章

使用 angularJS 的跨域请求

angularjs 1.2.6 的跨域请求错误

利用 iframe解决ajax的跨域问题

AngularJS 中的跨域 HTTP 请求失败

使用跨域资源共享的跨域 POST 查询没有返回数据

逆向工程使用 Ext.Ajax.request 的跨域 POST 请求