使用jsonp获取xml跨域

时间:2010-06-18 09:21:25

标签: xml xss cross-domain jsonp

我正在尝试将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)

2 个答案:

答案 0 :(得分:3)

如果您无法访问服务器(例如,如果您正在使用api),则可以使用 YQL将您的XML转换为jsonp并使用自定义的自定义YQL url(其中嵌入了类似SQL的语句)从浏览器查询yahoo服务器。这是一个例子(对于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'
  });
});

答案 1 :(得分:1)

如果您可以访问在远程服务器上生成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填写了???为您提供一些独特的包装器,它为您的成功回调生成了