使用jQuery进行跨域请求

对于一个项目,我需要获取不同其他域的网页源代码。 我试过以下代码:

$('#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 = '

Error: could not load the page.

'; container.html(errormsg); } } ); } else { $('#target').load(url); } } function filterData(data){ data = data.replace(/]*>/g,''); data = data.replace(/[\r|\n]+/g,''); data = data.replace(/<--[\S\s]*?-->/g,''); data = data.replace(/]*>[\S\s]*?<\/noscript>/g,''); data = data.replace(/]*>[\S\s]*?<\/script>/g,''); data = data.replace(//,''); return data; } });

您的案例的解决方案是带有填充或JSONP的JSON。

您将需要一个HTML元素,为其src属性指定一个返回JSON的URL,如下所示:

  

您可以在线搜索更深入的解释,但JSONP绝对是您的解决方案。

执行以下步骤。 1:将数据类型:jsonp添加到脚本中。 2:向url3添加“回调”参数:创建名称与“回调”参数值相同的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请求。