2009-07-29 7 views
6

Ich habe ein vorhandenes jQuery-Plugin, das viele AJAX-Aufrufe (meist JSON) macht. Ich frage mich, was es am schnellsten erlaubt, Cross-Site-Aufrufe zu tätigen, d. H. Die URLs $ .get und $ .post stammen nicht von derselben Domain.Cross-Site-AJAX mit jQuery

Ich habe von JSONP gehört, aber ich fragte mich, ob mir jemand ein konkretes Beispiel für den ganzen Prozess geben könnte. Ich möchte, wenn möglich, minimale Änderungen an meinem Skript vornehmen. Sollte ich eine Proxy.php verwenden?

Vielen Dank für Ihre Zeit.

Antwort

13

Mit JSONP können Sie standortübergreifende Anrufe tätigen. See jQuery docs on that matter.

Das Konzept ist einfach: Anstatt einen normalen Ajax-Aufruf auszuführen, fügt jQuery einen <script>-Tag an Ihre an. Damit dies funktioniert, müssen Ihre JSON-Daten in einen Funktionsaufruf verpackt werden.

Ihr Server benötigt Informationen in einer solchen Art und Weise (PHP Beispiel) zu senden:

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

Dann Sie jQuery verwenden können, diese Informationen zu holen:

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

Weitere Informationen finden Sie hier: What is JSONP?

+0

Schön! Ich werde weitermachen und das testen. Außer dass ich denke, dass die Echo-Anweisung die $ json-Variable und nicht die $ -Daten ausgeben sollte. Ist das korrekt ? –

+1

@PHP_Jedi: Das wäre richtig. Ich habe gerade diesen Tippfehler korrigiert (was peinlicherweise seit 2 Jahren dort ist). –

+0

Funktioniert wie ein Charme! –

2

Wenn Sie die Kontrolle über die Remote-Domäne oder der Remote-Domäne hat eine permissive crossdomain.xml Sie in einer Bibliothek wie flXHR in Verbindung mit seiner jQuery plugin fallen kann.

1

Sie können auch CORS anstelle von JSONP verwenden, arbeitet mit ff, chrome, safari. CORS ist weniger mühsam einzurichten und erfordert nur einen Filter in der Server-Seite.

Bitte gehen Sie durch diesen Artikel. Gut erklärt und ähnlich. Nur Einschränkung ist IE nicht unterstützt dies und ältere Versionen von FF, Chrom hat auch einige Probleme.

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

+0

Können Sie bitte beschreiben, wie Sie es in Ihrer Antwort verwenden können? – Ryan