2009-07-29 13 views
6

Ho un plugin jQuery esistente che effettua molte chiamate AJAX (principalmente JSON). Mi chiedo quale sia il modo più veloce per consentirgli di effettuare chiamate tra sedi, ovvero gli URL $ .get e $ .post non appartengono allo stesso dominio.Cross-site AJAX utilizzando jQuery

Ho sentito parlare di JSONP, ma mi chiedevo se qualcuno potesse darmi un esempio concreto per seguire l'intero processo. Voglio apportare modifiche minime, se possibile, al mio script. Dovrei usare un proxy.php di sorta?

Grazie per il vostro tempo.

risposta

13

JSONP consente di effettuare chiamate tra sedi diverse. See jQuery docs on that matter.

Il concetto è semplice: anziché eseguire una normale chiamata Ajax, jQuery aggiungerà un tag <script> al numero <head>. Affinché questo funzioni, i dati JSON devono essere racchiusi in una chiamata di funzione .

Il server ha bisogno di inviare informazioni in modo tale (PHP esempio):

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

Quindi, è possibile utilizzare jQuery per recuperare queste informazioni:

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

Ulteriori informazioni sono disponibili qui: What is JSONP?

+0

Bello! Andrò avanti e testarlo. Tranne che penso che la statuetta dell'eco debba stampare la variabile $ json, e non i $ data. È corretto ? –

+1

@PHP_Jedi: Sarebbe corretto. Ho appena corretto quell'errore di battitura (che, imbarazzantemente, è stato lì per 2 anni). –

+0

Funziona come un fascino! –

2

Se si ha il controllo sul dominio remoto o il dominio remoto ha una permissiva crossdomain.xml si può cadere in una libreria come flXHR in concomitanza con la sua jQuery plugin.

1

È inoltre possibile utilizzare CORS anziché JSONP, funziona con ff, chrome, safari. CORS è meno problematico per l'installazione e richiede solo un filtro sul lato server.

Si prega di leggere questo articolo. Ben spiegato e simile. Solo il vincolo è IE non supporta questa e le versioni precedenti di FF, anche Chrome presenta alcuni problemi.

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

+0

Puoi descrivere come usarlo nella risposta, per favore? – Ryan

Problemi correlati