Solicitações entre domínios com jQuery

Para um projeto, preciso obter o código-fonte da página da web de diferentes outros domínios. Eu tentei seguir o código:

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

Ainda não estou obtendo nenhum resultado, mas apenas uma checkbox de alerta em branco.

Por padrão, todos os navegadores restringem as solicitações entre domínios. Você pode contornar isso usando o YQL como proxy. Veja um guia aqui: http://ajaxian.com/archives/using-yql-as-a-proxy-for-cross-domain-ajax

Por motivos de segurança, os scripts não podem acessar o conteúdo de outros domínios. A Mozilla tem um longo artigo sobre o controle de access HTTP , mas o resultado final é que, sem o próprio site adicionar suporte para solicitações entre domínios, você está ferrando.

Este código está funcionando perfeitamente com a ajuda de JQuery e 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(/< ?\/body[^>]*>/g,''); data = data.replace(/[\r|\n]+/g,''); data = data.replace(/< --[\S\s]*?-->/g,''); data = data.replace(/

A solução para o seu caso é JSON com preenchimento ou JSONP.

Você precisará de um elemento HTML que especifique para seu atributo src um URL que retorne JSON assim:

  

Você pode pesquisar on-line para obter uma explicação mais detalhada, mas o JSONP é definitivamente sua solução para isso.

Siga os seguintes passos. 1: Adicione o tipo de dados: jsonp ao script. 2: Adicione um parâmetro “callback” ao url 3: Crie uma function javascript com o mesmo nome do valor do parâmetro “callback”. 4: A saída pode ser recebida dentro da function javascript.

Encontrei mais uma solução para isso:

 function getData(url){ if(url.match('^http')){ $.get(url, function(data){ process(data); }//end function(data) );//end get } } 

Esta é realmente uma maneira muito mais fácil de lidar com solicitações entre domínios. Como alguns dos sites como http://www.imdb.com rejeitam solicitações YQL.