对于一个项目,我需要得到不同的其他域的网页的源代码。我尝试了以下代码:
$('#container').load('http://google.com');
$.ajax({
url: 'http://news.bbc.co.uk',
type: 'GET',
success: function(res) {
var headline = $(res.responseText).find('a.tsh').text();
alert(headline);
}
});
我仍然没有得到任何结果,只是一个空白的警告框。
默认情况下,所有浏览器都限制跨域请求,您可以通过使用YQL作为代理来解决这个问题。参考指南:http://ajaxian.com/archives/using-yql-as-a-proxy-for-cross-domain-ajax
出于安全原因,脚本不能访问来自其他域的内容。Mozilla有一篇关于HTTP访问控制的长文,但底线是,如果网站本身不支持跨域请求,你就完蛋了。
这段代码在JQuery和YQL的帮助下工作得很好
$(document).ready(function(){
var container = $('#target');
$('.ajaxtrigger').click(function(){
doAjax($(this).attr('href'));
return false;
});
function doAjax(url){
if(url.match('^http')){
$.getJSON("http://query.yahooapis.com/v1/public/yql?"+
"q=select%20*%20from%20html%20where%20url%3D%22"+
encodeURIComponent("http://www.yahoo.com")+
"%22&format=xml'&callback=?",
function(data){
if(data.results[0]){
var data = filterData(data.results[0]);
container.html(data);
} else {
var errormsg = '<p>Error: could not load the page.</p>';
container.html(errormsg);
}
}
);
} else {
$('#target').load(url);
}
}
function filterData(data){
data = data.replace(/<?/body[^>]*>/g,'');
data = data.replace(/[r|n]+/g,'');
data = data.replace(/<--[Ss]*?-->/g,'');
data = data.replace(/<noscript[^>]*>[Ss]*?</noscript>/g,'');
data = data.replace(/<script[^>]*>[Ss]*?</script>/g,'');
data = data.replace(/<script.*/>/,'');
return data;
}
});
您的情况的解决方案是JSON与填充或JSONP。
你需要一个HTML元素,为它的src属性指定一个返回JSON的URL,如下所示:
<script type="text/javascript" src="http://differentDomain.com/RetrieveUser?UserId=1234">
您可以在网上搜索更深入的解释,但JSONP绝对是您的解决方案。
按以下步骤操作。1:在脚本中添加数据类型:jsonp。2:给url添加一个callback参数3:创建一个与"callback"参数值同名的javascript函数。4:输出可以在javascript函数中接收
找到了另一个解决方案:
function getData(url){
if(url.match('^http')){
$.get(url,
function(data){
process(data);
}//end function(data)
);//end get
}
}
这确实是处理跨域请求的一种相当简单的方法。因为有些网站如www.imdb.com拒绝YQL请求