Was ist JSONP?
Das Wichtigste bei jsonp ist, dass es sich nicht um ein Protokoll oder einen Datentyp handelt. Es ist nur eine Möglichkeit, ein Skript im laufenden Betrieb zu laden und das auf der Seite eingeführte Skript zu verarbeiten. Im Sinne von JSONP bedeutet dies, dass ein neues Javascript-Objekt vom Server in die Client-Anwendung / das Client-Skript eingefügt wird.
Wann wird JSONP benötigt?
Dies ist eine Methode, mit der eine Domäne asynchron auf Daten von einer anderen Domäne auf derselben Seite zugreifen / diese verarbeiten kann. In erster Linie wird es verwendet, um CORS-Einschränkungen (Cross Origin Resource Sharing) zu überschreiben, die bei einer XHR-Anforderung (Ajax) auftreten würden. Das Laden von Skripten unterliegt keinen CORS-Einschränkungen.
Wie wird es gemacht
Das Einführen eines neuen Javascript-Objekts vom Server kann auf viele Arten implementiert werden. Am häufigsten wird jedoch die Ausführung einer Rückruffunktion durch den Server implementiert, wobei das erforderliche Objekt übergeben wird. Die Rückruffunktion ist nur eine Funktion, die Sie bereits auf dem Client eingerichtet haben und die das geladene Skript an dem Punkt aufruft, an dem das Skript geladen wird , um die an ihn übergebenen Daten zu verarbeiten.
Beispiel:
Ich habe eine Anwendung, die alle Elemente bei jemandem zu Hause protokolliert. Meine Anwendung ist eingerichtet und ich möchte jetzt alle Elemente im Hauptschlafzimmer abrufen.
Meine Bewerbung ist eingeschaltet app.home.com
. Die APIs, von denen ich Daten laden muss, sind aktiviert api.home.com
.
Sofern der Server nicht explizit so eingerichtet ist, dass er dies zulässt, kann ich diese Daten nicht mit Ajax laden, da selbst Seiten in separaten Subdomänen XHR CORS-Einschränkungen unterliegen.
Richten Sie im Idealfall die XHR-XHR ein
Da sich die API und die App in derselben Domain befinden, kann ich im Idealfall die Header einrichten api.home.com
. In diesem Fall kann ich ein Access-Control-Allow-Origin:
Header-Element hinzufügen , das Zugriff gewährt app.home.com
. Angenommen, der Header ist wie folgt eingerichtet: Access-Control-Allow-Origin: "http://app.home.com"
Dies ist weitaus sicherer als das Einrichten von JSONP. Dies liegt daran, app.home.com
dass Sie alles bekommen können, was Sie wollen, api.home.com
ohne api.home.com
CORS Zugang zum gesamten Internet zu gewähren.
Die obige XHR-Lösung ist nicht möglich. Einrichten von JSONP In meinem Client-Skript: Ich habe eine Funktion eingerichtet, um die Antwort vom Server zu verarbeiten, wenn ich den JSONP-Aufruf tätige . ::
function processJSONPResponse(data) {
var dataFromServer = data;
}
Der Server muss so eingerichtet sein, dass er ein Mini-Skript zurückgibt, das ungefähr so aussieht. "processJSONPResponse('{"room":"main bedroom","items":["bed","chest of drawers"]}');"
Es könnte so konzipiert sein, dass es eine solche Zeichenfolge zurückgibt, wenn so etwas //api.home.com?getdata=room&room=main_bedroom
aufgerufen wird.
Anschließend richtet der Client ein Skript-Tag als solches ein:
var script = document.createElement('script');
script.src = '//api.home.com?getdata=room&room=main_bedroom';
document.querySelector('head').appendChild(script);
Dies lädt das Skript und ruft sofort window.processJSONPResponse()
als vom Server geschrieben / echo / ausgedruckt auf. Die als Parameter an die Funktion übergebenen Daten werden jetzt in der dataFromServer
lokalen Variablen gespeichert und Sie können damit alles tun, was Sie brauchen.
Aufräumen
Sobald der Kunde die Daten hat, dh. Unmittelbar nach dem Hinzufügen des Skripts zum DOM kann das Skriptelement aus dem DOM entfernt werden:
script.parentNode.removeChild(script);