使用jsonp获取xml跨域
Posted
技术标签:
【中文标题】使用jsonp获取xml跨域【英文标题】:use jsonp to get xml cross domain 【发布时间】:2011-03-05 08:27:00 【问题描述】:我正在尝试从另一台服务器将 xml 读入网页,我认为我的问题是同源策略,因此是跨域问题。
我用谷歌搜索了一下,似乎 jsonp 是前进的方向。 根据我在 *** 和其他站点上找到的一些示例,这就是我所拥有的,它不会使用 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)
【问题讨论】:
【参考方案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 小程序上使用代理有多种解决方法。以上是关于使用jsonp获取xml跨域的主要内容,如果未能解决你的问题,请参考以下文章
使用图片跨域方式获取图片数据 使用 jsonp 方式跨域获取数据
JQuery - $.ajax() - 使用 JSONP 的跨域 - 仅在 IE 8 中获取“解析器错误”(在 IE 7 中工作)