对于一个项目,我需要获取不同其他域的网页源代码。 我试过以下代码:
$('#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);
}
});
我仍然没有得到任何结果,只是一个空白的提示框。
答案 0 :(得分:11)
默认情况下,所有浏览器都会限制跨域请求,您可以使用YQL作为代理来解决此问题。请参阅此处的指南:http://ajaxian.com/archives/using-yql-as-a-proxy-for-cross-domain-ajax
答案 1 :(得分:4)
出于安全原因,脚本无法访问其他域中的内容。 Mozilla有一篇关于HTTP access control的长篇文章,但最重要的是,如果没有网站本身添加对跨域请求的支持,那你就搞砸了。
答案 2 :(得分:4)
此代码在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(/<--[\S\s]*?-->/g,'');
data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
data = data.replace(/<script.*\/>/,'');
return data;
}
});
答案 3 :(得分:1)
您的案例的解决方案是带有填充或JSONP的JSON。
您需要一个HTML元素,为其src属性指定一个返回JSON的URL,如下所示:
<script type="text/javascript" src="http://differentDomain.com/RetrieveUser?UserId=1234">
您可以在线搜索更深入的解释,但JSONP绝对是您的解决方案。
答案 4 :(得分:0)
执行以下步骤。 1:将数据类型:jsonp添加到脚本中。 2:添加&#34;回调&#34; url的参数 3:创建一个名称与&#34;回调&#34;相同的javascript函数参数价值。 4:输出可以在javascript函数内接收。
答案 5 :(得分:-1)
为此找到了另一个解决方案:
function getData(url){
if(url.match('^http')){
$.get(url,
function(data){
process(data);
}//end function(data)
);//end get
}
}
这是处理跨域请求的一种非常简单的方法。有些像www.imdb.com这样的网站会拒绝YQL请求。