2009-07-29 11 views
6

Tengo un plugin jQuery existente que hace muchas llamadas AJAX (principalmente JSON). Me pregunto cuál es la forma más rápida de permitirle hacer llamadas entre sitios, es decir, las URL $ .get y $ .post no serán del mismo dominio.Cross-site AJAX using jQuery

He oído hablar de JSONP, pero me preguntaba si alguien podría darme un ejemplo concreto para completar el proceso. Quiero hacer cambios mínimos si es posible para mi script. ¿Debería usar un tipo de proxy.php?

Gracias por su tiempo.

Respuesta

13

JSONP le permitirá hacer llamadas entre sitios. See jQuery docs on that matter.

El concepto es simple: en lugar de hacer una llamada Ajax normal, jQuery agregará una etiqueta <script> a su <head>. Para que esto funcione, sus datos JSON deben ser envueltos en una llamada a la función .

Su servidor necesita enviar la información de tal manera (PHP ejemplo):

$json = json_encode($data); 
echo $_GET['jsonp_callback'] . '(' . $json . ');'; 

A continuación, puede utilizar jQuery para obtener esa información:

$.ajax({ 
    dataType: 'jsonp', 
    jsonp: 'jsonp_callback', 
    url: 'http://myotherserver.com/getdata', 
    success: function() { 
    // do stuff 
    }, 
}); 

Más información está disponible aquí: What is JSONP?

+0

Nice! Voy a seguir y probar esto. Excepto que creo que la declaración del eco debería imprimir la variable $ json, y no los $ datos. Es eso correcto ? –

+1

@PHP_Jedi: Eso sería correcto. Acabo de corregir ese error tipográfico (que, embarazosamente, ha estado allí durante 2 años). –

+0

¡Funciona como un encanto! –

2

Si tiene control sobre el dominio remoto o si el dominio remoto tiene un crossdomain.xml permisivo, puede colocar una biblioteca como flXHR junto con su jQuery plugin.

1

También puede usar CORS en lugar de JSONP, funciona con ff, chrome, safari. CORS es menos problemático de configurar y solo requiere un filtro en el lado del servidor.

Lea este artículo.Explicado y similar. La única restricción es que IE no es compatible con esto y versiones anteriores de FF, Chrome también tiene algunos problemas.

http://techblog.constantcontact.com/software-development/using-cors-for-cross-domain-ajax-requests/

+0

¿Puede describir cómo usarlo en su respuesta, por favor? – Ryan