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.

Foi útil?

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/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top