【问题标题】:use jsonp to get xml cross domain使用jsonp获取xml跨域
【发布时间】:2011-03-05 08:27:00
【问题描述】:

我正在尝试从另一台服务器将 xml 读入网页,我认为我的问题是同源策略,因此是跨域问题。

我用谷歌搜索了一下,似乎 jsonp 是前进的方向。 根据我在 stackoverflow 和其他站点上找到的一些示例,这就是我所拥有的,它不会使用 xml 来“命中”服务器。我可以在浏览器中查看 xml。

$(document).ready(function(){    
   $.ajax({
        type: 'GET',
        dataType: 'jsonp',                
        url: 'http://192.168.0.106:8111/getconfiguration?',
        success: function (xml) 
        { //do stuff with received xml 
        }});    

有什么建议吗?请记住,我是 JS / JQuery 的新手;o)

【问题讨论】:

    标签: xml xss cross-domain jsonp


    【解决方案1】:

    如果您无权访问服务器(例如,您正在使用 api),您可以使用 YQL 将您的 XML 转换为 jsonp 并使用自定义自定义 YQL url(其中嵌入了类似 SQL 的语句)从浏览器查询雅虎服务器。这是一个示例(对于 zillow api):

    $('document').ready(function(){
      $.ajax({
        url: 'http://query.yahooapis.com/v1/public/yql?q=select * from zillow.search where address = "1835 73rd Ave NE" and citystatezip = "98039" and zwsid = "X1-ZWz1cse68iatcb_13bwv"&format=json&diagnostics=true&env=http://datatables.org/alltables.env&callback=mydata',
        jsonpCallback: "mydata",
        success: function(results) {
          console.log(results.query.results.searchresults.response.results.result.zpid);
        },
        dataType: 'jsonp'
      });
    });
    

    【讨论】:

      【解决方案2】:

      如果您可以访问在远程服务器上生成 XML 的代码,则可以将整个内容包装在 jsonp 中。

      JSONP 是一种绕过同源策略的方法,通过使用<script> 标签获取数据,而不是尝试远程提取信息。

      在你的 getconfiguation 脚本中,你会有类似的东西

      callback("SERVER GENERATED XML/JSON DATA GOES HERE");
      

      远程调用指定回调的地方

      例如,如果你的远程脚本是 php,你可以让它看起来像这样:

      <?php
      // getconfiguration.php
      echo "$_GET['callback']($configuration_data);"
      ?>
      

      然后运行您在问题中提供的 AJAX。 这实际上是在您的页面中动态插入一个脚本标签,如下所示:

      <script src="http://192.168.0.106:8111/getconfiguation.php?callback=???"></script>
      

      jquery 填写 ???为您提供一些为您的成功回调生成的独特包装器

      【讨论】:

      • 如果您无法访问它怎么办?您只能发送/接收 xml 格式的数据。
      • 如果服务器没有设置为处理跨域、客户端、javascript交互,那么你不能强制它。在您的服务器、flash 或 java 小程序上使用代理有多种解决方法。
      猜你喜欢
      • 2011-07-31
      • 2014-08-14
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 2012-02-29
      相关资源
      最近更新 更多