Könnte mir bitte jemand helfen, herauszufinden, wie ich mit JSONP anfangen kann?
Code:
$('document').ready(function() {
var pm_url = 'http://twitter.com/status';
pm_url += '/user_timeline/stephenfry.json';
pm_url += '?count=10&callback=photos';
var photos = function (data) {
alert(data);
};
$.ajax({
url: pm_url,
dataType: 'jsonp',
jsonpCallback: 'photos',
jsonp: false,
});
});
Geige: http://jsfiddle.net/R7EPt/6/
Sollte eine Warnung erzeugen, soweit ich aus der Dokumentation ersehen kann: ist nicht (erzeugt aber auch keine Fehler).
Vielen Dank.
Antworten:
JSONP ist wirklich ein einfacher Trick, um dieselbe Domain-Richtlinie von XMLHttpRequest zu überwinden . (Wie Sie wissen, kann eine AJAX- Anfrage (XMLHttpRequest) nicht an eine andere Domain gesendet werden.)
Anstatt XMLHttpRequest zu verwenden, müssen wir Skript- HTMLl-Tags verwenden, die Sie normalerweise zum Laden von JS-Dateien verwenden, damit JS Daten von einer anderen Domäne abruft. Klingt komisch?
Es stellt sich heraus, dass Skript- Tags ähnlich wie XMLHttpRequest verwendet werden können ! Überprüfen Sie dies heraus:
Sie erhalten ein Skriptsegment , das nach dem Laden der Daten folgendermaßen aussieht:
Dies ist jedoch etwas unpraktisch, da wir dieses Array vom Skript- Tag abrufen müssen. Daher haben JSONP- Entwickler entschieden, dass dies besser funktioniert (und das ist es auch):
Beachten Sie die Funktion my_callback dort drüben? Wenn der JSONP- Server Ihre Anfrage empfängt und den Rückrufparameter findet, wird anstelle eines einfachen JS-Arrays Folgendes zurückgegeben:
Sehen Sie, wo der Gewinn liegt: Jetzt erhalten wir einen automatischen Rückruf ( my_callback ), der ausgelöst wird, sobald wir die Daten erhalten. Das ist alles, was Sie über JSONP wissen müssen : Es handelt sich um einen Rückruf und Skript-Tags.
ANMERKUNG:
Dies sind einfache Beispiele für die Verwendung von JSONP. Dies sind keine produktionsfertigen Skripte.
RAW-JavaScript-Demonstration (einfacher Twitter-Feed mit JSONP):
Grundlegendes jQuery-Beispiel (einfacher Twitter-Feed mit JSONP):
JSONP steht für JSON with Padding . (Sehr schlecht benannte Technik, da sie wirklich nichts mit dem zu tun hat, was die meisten Leute als „Polsterung“ betrachten würden.)
quelle
Access-Control-Allow-Origin
Header unterstützen, mit denen regelmäßige Ajax-Aufrufe an einige Ursprungsdomänen getätigt werden können.Es gibt noch einfachere Möglichkeiten, mit JSONP mithilfe von jQuery zu arbeiten
Das
?
am Ende der URL teilt jQuery mit, dass es sich um eine JSONP-Anforderung anstelle von JSON handelt. jQuery registriert und ruft die Rückruffunktion automatisch auf.Weitere Informationen finden Sie in der Dokumentation zu jQuery.getJSON .
quelle
&callback=?
da dies in Ihrem Fall nicht der erste Parameter ist.Als Reaktion auf das OP gibt es zwei Probleme mit Ihrem Code: Sie müssen jsonp = 'callback' setzen, und das Hinzufügen einer Rückruffunktion in einer Variablen, wie Sie es getan haben, scheint nicht zu funktionieren.
Update: Als ich dies schrieb, war die Twitter-API gerade geöffnet, aber sie wurde geändert und erfordert jetzt eine Authentifizierung. Ich habe das zweite Beispiel in ein funktionierendes Beispiel (2014Q1) geändert, verwende aber jetzt Github.
Dies funktioniert nicht mehr - prüfen Sie als Übung, ob Sie es durch die Github-API ersetzen können:
Obwohl alert () für ein solches Array nicht wirklich gut funktioniert ... Auf der Registerkarte "Net" in Firebug wird der JSON korrekt angezeigt. Ein weiterer praktischer Trick ist zu tun
Sie können auch die Methode jQuery.getJSON verwenden. Hier ist ein vollständiges HTML-Beispiel, das eine Liste der "Gists" von Github erhält. Auf diese Weise wird eine zufällig benannte Rückruffunktion für Sie erstellt, das ist der endgültige "Rückruf =?" in der URL.
quelle
Der obige Code hilft beim Abrufen von Bildern von der Flicker-API. Dies verwendet die GET-Methode zum Abrufen von Bildern mit JSONP. Es kann hier im Detail gefunden werden
quelle