使用jQuery进行跨域请求

时间:2011-10-03 17:57:34

标签: ajax jquery cross-domain

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

$('#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);
    }
});

我仍然没有得到任何结果,只是一个空白的提示框。

6 个答案:

答案 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请求。