来自不支持JSON-P输出的外部域的jQuery“getJSON”

时间:2009-12-04 08:55:24

标签: javascript jquery json cross-domain jsonp

我正在尝试从外部网站上的JSON获取数据,但该网站不支持JSON-P输出。这是一个非工作代码的例子,但很好地了解了我想要实现的目标:

$.getJSON("http://www.bom.gov.au/fwo/IDV60901/IDV60901.94868.json", function(data){
    //Process data here
});

除了本地托管数据或使用AJAX / PHP调用下载和处理数据之外,还有其他方法吗?我宁愿不让服务器提供服务或下载数据,而是让用户的浏览器直接获取它。

提前致谢!

2 个答案:

答案 0 :(得分:5)

最简单的选择是通过PHP代理脚本运行json调用, 喜欢这个:

<?php
// PHP Proxy
// Loads a file from any location.
// Author:Paulo Fierro
// January 29, 2006
// usage: proxy.php?url=http://mysite.com/myxml.xml

$session = curl_init($_GET['url']);                    
curl_setopt($session, CURLOPT_HEADER, false);          
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);   
$xml = curl_exec($session);                            
echo $xml;        
curl_close($session); 

&GT;

并使用它作为你的来源ajaxCall

$.getJSON("proxy.php?url=http%3A%2F%2Fwww.bom.gov.au%2Ffwo%2FIDV60901%2FIDV60901.94868.json", function(data){

答案 1 :(得分:1)

如果没有自愿的外部服务器或服务器端代理,大多数浏览器的Same Origin Policy都不允许您这样做。你可以尝试使用flash进行一些黑客攻击:

http://flxhr.flensed.com/

这假设您的用户已安装了Flash,但一般来说,如果他们安装了javascript,他们也会有flash ...

OR

如果您要查找的数据在某个地方作为Feed发送,您可以将其传递给Yahoo Pipes,他们将为您返回jsonp。

祝你好运!