JSON-P mit jQuery

Manche Projekte erfordern es, dass Scripte über Domains hinweg arbeiten. Wenn auf einem Server mehrere Domains gehostet sind ist das für serverseitige Scripts kein Problem, jedoch bei clientseitigem Scripting, kann das schon schwieriger werden. Möchte man mit JavaScript per AJAX Daten nachladen, tut man dies oft, indem man sich die Daten als JSON-Struktur anliefern lässt. Geht dies jedoch über unterschiedliche Domains hinweg, kommt einem die „Same-Origin-Policy“ in die Quere. Abhilfe schafft hier JSON-P.

Same-Origin-Policy und die Lücke

Die „Same-Origin-Policy“ besagt, dass nur Scripte vom selben Server Daten austauschen dürfen, nur ist nach Same-Origin-Policy example.com bereits ungleich mit www.example.com, aber eben auch deutlich ersichtlich unterschiedlich zu www.domain.com. Es gibt jedoch eine Lücke in der Same-Origin-Policy und das ist das script-Tag. Im src-Attrbiut dieses Tags kann man jeden Server angeben und ein Script von dort laden, wie man möchte. JSON-P nutzt diese Lücke, jedoch sollte man natürlich vorsichtig sein und nur von vertrauten Quellen Daten nachladen.

JSON-P mit jQuery nutzen

Wer per AJAX JSON-P (das P steht übrigens für Padding) nachladen möchte, kann dies einfach mittels der Funktion

$.getJSON(url,[data],[callback]);

tun. Zu beachten ist nur, dass man einen Parameter callback={irgendwas} mit angibt. Diesen Wert der callback-Variable muss das Script auf dem Server entgegennehmen und als Funktionsnahme der Antwort zurückliefern.
Anfrage:

$.getJSON('http://www.example.com/user/123456/json?callback=gallery', function(data){
  // Funktion nach erfolgreichem Abruf der Daten
  ...
});

Antwort vom Server:

gallery([{ 
  "name"  : "wert",
  "name2" : "wert2",
  ... 
}]);

Auch wenn es sich prinzipiell um JSON handelt wird hier eigentlich nur eine JavaScript-Funktion mit sehr viel JSON-Inhalt zurückgegeben, weshalb der Server auch nicht „application/json“ als Mime-Type senden sollte, sondern das standardmäßige „text/javascript“.

Veröffentlicht von

Hilko

2006 machte ich mein Hobby zum Beruf, startete mit einer Ausbildung zum Mediengestalter und arbeite inzwischen in Hannover als Frontend Web-Developer. Neben der Leidenschaft für semantisches Markup und den Möglichkeiten der aktuellen Frontend-Techniken, interessiere ich mich für das Reisen, fremde Kulturen und die Kunst der Fotografie.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.