【问题标题】:Cross domain ajax request that returns xml using AngularJS使用AngularJS返回xml的跨域ajax请求
【发布时间】:2023-03-11 21:24:02
【问题描述】:

我正在尝试使用 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);
    });

这可能吗? 提前致谢

【问题讨论】:

    标签: xml ajax angularjs jsonp


    【解决方案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 服务)

    祝你有美好的一天,

    【讨论】:

      猜你喜欢
      • 2016-03-03
      • 2011-07-03
      • 2018-01-05
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      相关资源
      最近更新 更多