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 = '<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请求

相关内容

  • 没有找到相关文章

最新更新