Ajax cruzado usando jQuery
-
20-09-2019 - |
Pergunta
Eu tenho um plugin jQuery existente que faz muitas chamadas de Ajax (principalmente JSON). Estou me perguntando qual é o mais rápido para permitir que ele faça chamadas entre sites, ou seja, os $ .get e $. Post URLs não serão do mesmo domínio.
Ouvi falar do JSONP, mas queria saber se alguém poderia me dar um exemplo concreto para realizar todo o processo. Quero fazer alterações mínimas, se possível, no meu script. Devo usar um tipo de proxy.php?
Obrigado pelo seu tempo.
Solução
O JSONP permitirá que você faça chamadas cruzadas. Veja JQuery Docs sobre esse assunto.
O conceito é simples: em vez de fazer uma chamada normal de Ajax, o jQuery anexará um <script>
tag para o seu <head>
. Para que isso funcione, seus dados JSON precisam ser envolvidos em uma chamada de função.
Seu servidor precisa enviar informações dessa maneira (exemplo php):
$json = json_encode($data);
echo $_GET['jsonp_callback'] . '(' . $json . ');';
Em seguida, você pode usar o jQuery para buscar essas informações:
$.ajax({
dataType: 'jsonp',
jsonp: 'jsonp_callback',
url: 'http://myotherserver.com/getdata',
success: function () {
// do stuff
},
});
Mais informações estão disponíveis aqui: O que é jsonp?
Outras dicas
Se você tem controle sobre o domínio remoto ou o domínio remoto tem um permissivo crossDomain.xml você pode cair em uma biblioteca como flxhr em conjunto com o seu plugin jQuery.
Você também pode usar CORS em vez de JSONP, trabalha com FF, Chrome, Safari. O CORS é menos problemático para configurar e requer apenas um filtro no lado do servidor.
Por favor, passe por este artigo. Bem, explicou e similar. A única restrição é que o IE não suporta isso e versões mais antigas do FF, o Chrome também tem alguns problemas.
http://techblog.constantcontact.com/software-development/using-cors-for-cross-domain-ajax-requests/