我知道AJAX跨域策略。因此,我不能简单地通过ajax HTTP请求调用"http://www.google.com“并在我的站点上的某个地方显示结果。
我用dataType“JSON it”尝试了一下,这实际上是可行的,但是我得到了一个语法错误(显然是因为收到的数据不是JSON格式的)。
是否存在从外部域接收/显示数据的其他可能性?iFrames是否遵循相同的策略?
发布于 2010-04-01 16:29:33
使用AJAX获取跨域数据的唯一(简单)方法是使用服务器端语言作为代理,正如Andy E所指出的那样。下面是一个小示例,说明如何使用jQuery实现该功能:
jQuery部分:
$.ajax({
url: 'proxy.php',
type: 'POST',
data: {
address: 'http://www.google.com'
},
success: function(response) {
// response now contains full HTML of google.com
}
});
和PHP (proxy.php):
echo file_get_contents($_POST['address']);
就这么简单。只需意识到您可以或不能对抓取的数据执行哪些操作。
发布于 2010-04-01 16:14:50
您将需要在引用数据的页面中动态插入脚本标记。使用JSONP,您可以在加载脚本时执行一些回调函数。
JSONP上的维基百科页面有一个简明的示例;脚本标记:
<script type="text/javascript" src="http://domain1.com/getjson?jsonp=parseResponse">
</script>
将返回包装在parseResponse
调用中的JSON数据。
parseResponse({"Name": "Cheeso", "Rank": 7})
(取决于domain1.com上getjson
脚本的配置)
动态插入标记的代码如下所示:
var s = document.createElement("script");
s.src = "http://domain1.com/getjson?jsonp=parseResponse";
s.type = "text/javascript";
document.appendChild(s);
发布于 2011-09-10 11:58:39
您可以使用YQL来执行请求,而无需托管您自己的代理。我创建了一个简单的函数来简化命令的运行:
function RunYQL(command, callback){
callback_name = "__YQL_callback_"+(new Date()).getTime();
window[callback_name] = callback;
a = document.createElement('script');
a.src = "http://query.yahooapis.com/v1/public/yql?q="
+escape(command)+"&format=json&callback="+callback_name;
a.type = "text/javascript";
document.getElementsByTagName("head")[0].appendChild(a);
}
如果你有jQuery,你可以改用$.getJSON。
示例可能如下所示:
RunYQL('select * from html where url="http://www.google.com/"',
function(data){/* actions */}
);
https://stackoverflow.com/questions/2558977
复制相似问题