Sagen wir, Sie haben eine URL, die Ihnen JSON-Daten liefert wie:
{'field': 'value'}
...und Sie haben eine ähnliche URL, außer dass sie JSONP verwendet. Dazu übergeben Sie den Callback-Funktionsnamen 'myCallback' (normalerweise durch Angabe eines Query-Parameters namens 'callback', z.B. http://example.com/dataQuelle?callback=myCallback
). Dann würde es zurückgeben:
myCallback({'field':'value'})
...das ist nicht nur ein Objekt, sondern tatsächlich ausführbarer Code. Wenn Sie also woanders in Ihrer Seite eine Funktion namens myFunction
definieren und dieses Skript ausführen, wird sie mit den Daten von der URL aufgerufen.
Das Tolle daran ist: Sie können ein Skript-Tag erstellen und Ihre URL (inklusive callback
-Parameter) als src
-Attribut verwenden, und der Browser wird es ausführen. Das bedeutet, Sie können die Same-Origin-Sicherheitsrichtlinie umgehen (weil Browser es erlauben, Skript-Tags von Quellen außerhalb der Domain der Seite auszuführen).
Das ist das, was jQuery macht, wenn Sie eine Ajax-Anfrage stellen (mit .ajax
und 'jsonp' als Wert für die dataType
-Eigenschaft). Z.B.
$.ajax({
url: 'http://example.com/datasource',
dataType: 'jsonp',
success: function(data) {
// Ihr Code zur Verarbeitung der Daten hier
}
});
Hier kümmert sich jQuery um den Callback-Funktionsnamen und den Query-Parameter, so dass die API identisch zu anderen Ajax-Aufrufen ist. Aber im Gegensatz zu anderen Arten von Ajax-Anfragen sind Sie, wie bereits erwähnt, nicht darauf beschränkt, Daten aus der gleichen Ursprung wie Ihre Seite zu erhalten.
12 Stimmen
Potenziell nützlich: stackoverflow.com/questions/2067472/please-explain-jsonp