JSON und JSONP
JSON (JavaScript Object Notation) ist ein leichtes Datenaustauschformat, das zum Austausch von Informationen zwischen Browsern und Servern verwendet wird.
JSONP (JSON With Padding) ist JSON (oder verpacktes JSON), verpackt in einem Funktionsaufruf.
JSON ist ein Datenformat und JSONP ist eine Datenaufrufmethode.
Aus Sicherheitsgründen können Skripte (AJAX) nicht auf Inhalte außerhalb dieser Domain zugreifen. Statische Ressourcen sind jedoch nicht durch Domänenrichtlinien eingeschränkt und können Skripte, Stile, Bilder und andere statische Ressourcen aus jeder Domäne laden. JSOP nutzt dieses Prinzip, um eine domänenübergreifende Datenerfassung zu erreichen.
Beispiel 1:
Dieses Beispiel zeigt, wie eine JavaScript-Funktion mit statischen JSON-Daten als Parameter aufgerufen wird.
Beispiel 2:
Der erste Funktionsaufruf kann in eine js-Datei geschrieben und auf dem Server abgelegt, mit einem Skript-Tag in die Seite geladen werden, und dieses Tag kann dynamisch erstellt werden.
Der Inhalt von remote.js ist derselbe wie das, was zuvor im Tag geschrieben wurde:
1 showPrice({symbol: 'IBM', Preis: 91,42});
Der dynamisch eingefügte JavaScript-Code übernimmt die zu übergebenden JSON-Daten als Parameter und den Parameter der showPrice-Funktionsaufrufanweisung.
Die Frage ist also: Sollte die Funktion showPrice jedes Mal aufgerufen werden, wenn die Daten abgerufen werden? Dies erfordert eine Vereinbarung zwischen Front-End- und Back-End-Programmierern. Dies führt natürlich zu großen Unannehmlichkeiten, insbesondere wenn die Schnittstelle für die öffentliche Entwicklung geöffnet ist. JSOP wird auf diese Weise verarbeitet: Das Front-End unterstützt die Übergabe eines Callback-Funktionsnamensparameters, das Back-End empfängt den Callback-Funktionsnamensparameter, generiert dann einen Aufruf an die Funktion, übergibt die JSON-Daten als Parameter und fügt sie ein in die Seite ein, wenn es den Client erreicht, um die Ausführung zu starten.
Beispiel 3:
Code mit Rückrufparametern dynamisch einfügen:
Codeausschnitt des in PHP im Backend implementierten JSONP-Dienstes: