Heim Web-Frontend js-Tutorial Implementierungsprinzip von JSONP

Implementierungsprinzip von JSONP

Apr 14, 2018 pm 05:29 PM
javascript jsonp 实现

Dieses Mal werde ich Ihnen die Implementierungsprinzipien von JSONP und die Vorsichtsmaßnahmen bei der Verwendung von JSONP vorstellen. Hier sind praktische Fälle, schauen wir uns das an.

Das Implementierungsprinzip von JSONP

Ich glaube, dass viele Menschen, die sich mit der Front-End- und Back-End-Trennung beschäftigen, oft JSONP ausgesetzt sind. Viele Anfänger wissen es jedoch nicht Wie Sie JSONP und dessen Implementierungsprinzip implementieren, wird Ihnen in diesem Artikel ausführlich vorgestellt. Wenn Sie interessiert sind, werfen Sie einen Blick darauf.

Grundprinzipien

Das Grundprinzip ist leicht zu erklären. Es gibt einige Tags in HTML-Seiten, die keinen domänenübergreifenden Einschränkungen unterliegen, wie z. B. img, script, link usw. Wenn wir die benötigten Daten in eine js-Datei einfügen, können wir die Same-Origin-Beschränkung des Browsers durchbrechen.

Erstellen Sie ein Skript-Tag

Dynamische Skriptelemente werden in „High Performance JavaScript“ erwähnt und der Autor schreibt:

1. Der Download der Datei beginnt, wenn das Element zur Seite hinzugefügt wird. Der entscheidende Punkt dieser Technik besteht darin, dass bei jedem initiierten Download der Download und die Ausführung der Datei andere Prozesse auf der Seite nicht blockieren.

2. Wenn Sie dynamische Skriptknoten zum Herunterladen von Dateien verwenden, wird der zurückgegebene Code normalerweise sofort ausgeführt (mit Ausnahme von Firefox und Oprea, die warten, bis alle vorherigen dynamischen Skriptknoten die Ausführung abgeschlossen haben). Wenn das Skript selbst ausgeführt wird, funktioniert dieser Mechanismus normal .

Zitat1 stellt sicher, dass der Hauptthread nicht blockiert wird, wenn JSONP-Anfragen gestellt werden. Zitat 2 stellt sicher, dass es keine Fehler gibt, wenn der JSONP-Code unmittelbar nach Abschluss des Ladevorgangs selbst ausgeführt wird.

Rückruf

Nach Erhalt der GET-Anfrage ermittelt der Server normalerweise, ob ein Rückrufparameter vorhanden ist. Wenn ja, muss er außerhalb der zurückgegebenen Daten einen Methodennamen und Klammern hinzufügen. Leiten Sie beispielsweise die folgende Anfrage ein:

http://www.a.com/getSomething?callback=jsonp0
Nach dem Login kopieren

Dann gibt der Server den folgenden Inhalt zurück:

jsonp0({code:200,data:{}})
Nach dem Login kopieren

Da dies der Inhalt des dynamisch geladenen Skript-Tags ist, handelt es sich offensichtlich um einen selbstausführenden Code, und nur eine Funktion dieses Codes wird aufgerufen – jsonp0.

Wenn es eine Ausführung gibt, muss diese natürlich zuerst erstellt werden, sonst wird ein Fehler gemeldet. Dieser Erstellungsschritt muss vor dem Aufruf ausgeführt werden.

Die spezifische Implementierung lautet wie folgt:

function jsonp (url, successCallback, errorCallback, completeCallback) {
 // 声明对象,需要将函数声明至全局作用域
 window.jsonp0 = function (data) {
  successCallback(data);
  if (completeCallback) completeCallback();
 }
 // 创建script标签,并将url后加上callback参数
 var 
  script = document.createElement('script')
  , url = url + (url.indexOf('?') == -1 ? '?' : '&') + 'callback=jsonp0'
 ;
 script.src = url;
 document.head.parentNode.insertBefore(script, document.head);
 // 等到script加载完毕以后,就会自己执行
}
Nach dem Login kopieren

Das Obige vervollständigt im Grunde den Kern einer JSONP-Methode. Zu diesem Zeitpunkt ist JSONP0 eine Funktion, die wir deklariert haben. Wenn der Server normal zurückkehrt, wird die JSONP0-Funktion ausgeführt, und der darin enthaltene SuccessCallback-Rückruf wird ebenfalls ausgeführt.

Verbessere es

In tatsächlichen Situationen werden normalerweise viele JSONP-Anfragen gleichzeitig aufgerufen,

Da jsonp0 unsere Anforderungen erfüllen kann, warum sehen wir dann oft, dass der Code von jsonp1, jsonp2 usw. nacheinander akkumuliert wird?

Dies liegt daran, dass viele Anfragen möglicherweise asynchron gestellt werden. Wenn die JSONP-Methode zum ersten Mal ausgeführt wird, ist window.jsonp0 die Funktion A. Zu diesem Zeitpunkt wird die JS-Datei geladen. Wenn JS nicht geladen wird, wird die JSONP-Methode erneut aufgerufen Funktion B. Nachdem die beiden js geladen wurden, wird der zweite Rückruf ausgeführt.

Daher müssen wir im Namen des Rückrufs unterscheiden, und die Akkumulation kann den Anforderungen gerecht werden.

Ändern Sie den Code:

var jsonpCounter = 0;
function jsonp (url, successCallback, errorCallback, completeCallback) {
 var jsId = 'jsonp' + jsonpCounter++;
 // 声明对象,需要将函数声明至全局作用域
 window[jsId] = function (data) {
  successCallback(data);
  if (completeCallback) completeCallback();
  clean();
 }
 // 创建script标签,并将url后加上callback参数
 var 
  script = document.createElement('script')
  , url = url + (url.indexOf('?') == -1 ? '?' : '&') + 'callback=' + jsId
 ;
 script.src = url;
 document.head.parentNode.insertBefore(script, document.head);
 // 等到script加载完毕以后,就会自己执行
 //在执行完我们这个方法以后,会有很多script标签出现在head之前,我们需要手动的删除掉他们。
 function clean () {
  script.parentNode.removeChild(script);
  window[jsId] = function(){};
 }
}
Nach dem Login kopieren

Nach dem Hinzufügen von Akkumulation und Bereinigung muss noch ein weiterer wichtiger Punkt behandelt werden, nämlich der Fehlerrückruf. Wenn wir JSONP anfordern, legen wir normalerweise eine Zeitüberschreitung fest. Wenn diese Zeit überschritten wird, wird eine Zeitüberschreitungsausnahme ausgelöst.

Die Umsetzung ist wie folgt:

var jsonpCounter = 0;
function jsonp (url, successCallback, errorCallback, completeCallback, timeout) {
 // 略去上面写过的代码
 var 
  timeout = timeout || 10000
  , timer
 ;
 if (timeout) {
  timer = setTimeout(function () {
   if (errorCallback) {
    errorCallback(new Error('timeout'));
   }
   clean();
  }, timeout)
 }
 function clean () {
  script.parentNode.removeChild(script);
  window[jsId] = function(){};
  if (timer) clearTimeout(timer);
 }
}
Nach dem Login kopieren

Auf diese Weise sind grundsätzlich alle Funktionen von JSONP abgeschlossen, und für den Rest sind möglicherweise einige kompatible Änderungen erforderlich, um als vollständige JSONP-Methode betrachtet zu werden.

REFERENZ

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Methoden zum Übergeben von Parametern zwischen Vue-Router-Komponenten

Vue.js mobile Komponentenbibliothek Anleitung Verwenden Sie

Das obige ist der detaillierte Inhalt vonImplementierungsprinzip von JSONP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Mar 24, 2024 am 11:27 AM

Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Mit dem Aufkommen der sozialen Medien ist WeChat zu einem unverzichtbaren Kommunikationsmittel im täglichen Leben der Menschen geworden. Viele Menschen können jedoch auf ein Problem stoßen: Sie können sich gleichzeitig auf demselben Mobiltelefon bei mehreren WeChat-Konten anmelden. Für Huawei-Mobiltelefonbenutzer ist es nicht schwierig, eine doppelte WeChat-Anmeldung zu erreichen. In diesem Artikel wird erläutert, wie eine doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen erreicht wird. Erstens bietet das EMUI-System, das mit Huawei-Mobiltelefonen geliefert wird, eine sehr praktische Funktion – das doppelte Öffnen von Anwendungen. Durch die doppelte Öffnungsfunktion der Anwendung können Benutzer gleichzeitig

PHP-Programmierhandbuch: Methoden zur Implementierung der Fibonacci-Folge PHP-Programmierhandbuch: Methoden zur Implementierung der Fibonacci-Folge Mar 20, 2024 pm 04:54 PM

Die Programmiersprache PHP ist ein leistungsstarkes Werkzeug für die Webentwicklung, das eine Vielzahl unterschiedlicher Programmierlogiken und Algorithmen unterstützen kann. Unter diesen ist die Implementierung der Fibonacci-Folge ein häufiges und klassisches Programmierproblem. In diesem Artikel stellen wir vor, wie Sie die Fibonacci-Folge mit der Programmiersprache PHP implementieren, und fügen spezifische Codebeispiele bei. Die Fibonacci-Folge ist eine mathematische Folge, die wie folgt definiert ist: Das erste und das zweite Element der Folge sind 1, und ab dem dritten Element ist der Wert jedes Elements gleich der Summe der beiden vorherigen Elemente. Die ersten paar Elemente der Sequenz

So implementieren Sie die WeChat-Klonfunktion auf Huawei-Mobiltelefonen So implementieren Sie die WeChat-Klonfunktion auf Huawei-Mobiltelefonen Mar 24, 2024 pm 06:03 PM

So implementieren Sie die WeChat-Klonfunktion auf Huawei-Mobiltelefonen Mit der Popularität sozialer Software und der zunehmenden Bedeutung von Datenschutz und Sicherheit rückt die WeChat-Klonfunktion allmählich in den Mittelpunkt der Aufmerksamkeit der Menschen. Die WeChat-Klonfunktion kann Benutzern helfen, sich gleichzeitig bei mehreren WeChat-Konten auf demselben Mobiltelefon anzumelden, was die Verwaltung und Nutzung erleichtert. Es ist nicht schwierig, die WeChat-Klonfunktion auf Huawei-Mobiltelefonen zu implementieren. Sie müssen lediglich die folgenden Schritte ausführen. Schritt 1: Stellen Sie sicher, dass die Version Ihres Mobiltelefonsystems und die WeChat-Version den Anforderungen entsprechen. Stellen Sie zunächst sicher, dass die Version Ihres Huawei-Mobiltelefonsystems sowie die WeChat-App auf die neueste Version aktualisiert wurden.

So implementieren Sie eine exakte Divisionsoperation in Golang So implementieren Sie eine exakte Divisionsoperation in Golang Feb 20, 2024 pm 10:51 PM

Die Implementierung exakter Divisionsoperationen in Golang ist ein häufiger Bedarf, insbesondere in Szenarien mit Finanzberechnungen oder anderen Szenarien, die hochpräzise Berechnungen erfordern. Der in Golang integrierte Divisionsoperator „/“ wird für Gleitkommazahlen berechnet, und manchmal besteht das Problem eines Präzisionsverlusts. Um dieses Problem zu lösen, können wir Bibliotheken von Drittanbietern oder benutzerdefinierte Funktionen verwenden, um exakte Divisionsoperationen zu implementieren. Ein gängiger Ansatz ist die Verwendung des Rat-Typs aus dem Paket math/big, der eine Darstellung von Brüchen bereitstellt und zur Implementierung exakter Divisionsoperationen verwendet werden kann.

Meistern Sie, wie Golang Möglichkeiten für die Spieleentwicklung eröffnet Meistern Sie, wie Golang Möglichkeiten für die Spieleentwicklung eröffnet Mar 16, 2024 pm 12:57 PM

Im heutigen Bereich der Softwareentwicklung wird Golang (Go-Sprache) als effiziente, prägnante und hochgradig parallele Programmiersprache von Entwicklern zunehmend bevorzugt. Seine umfangreiche Standardbibliothek und die effizienten Parallelitätsfunktionen machen es zu einer hochkarätigen Wahl im Bereich der Spieleentwicklung. In diesem Artikel wird untersucht, wie man Golang für die Spieleentwicklung verwendet, und seine leistungsstarken Möglichkeiten anhand spezifischer Codebeispiele demonstriert. 1. Golangs Vorteile bei der Spieleentwicklung: Als statisch typisierte Sprache wird Golang beim Aufbau großer Spielsysteme verwendet.

Implementierungshandbuch für PHP-Spielanforderungen Implementierungshandbuch für PHP-Spielanforderungen Mar 11, 2024 am 08:45 AM

Implementierungsleitfaden für PHP-Spielanforderungen Mit der Popularität und Entwicklung des Internets erfreut sich der Markt für Webspiele immer größerer Beliebtheit. Viele Entwickler hoffen, die PHP-Sprache zur Entwicklung ihrer eigenen Webspiele nutzen zu können, und die Umsetzung der Spielanforderungen ist ein wichtiger Schritt. In diesem Artikel wird erläutert, wie Sie mithilfe der PHP-Sprache allgemeine Spielanforderungen implementieren und spezifische Codebeispiele bereitstellen. 1. Spielfiguren erstellen In Webspielen sind Spielfiguren ein sehr wichtiges Element. Wir müssen die Attribute des Spielcharakters wie Name, Level, Erfahrungswert usw. definieren und Methoden für deren Bedienung bereitstellen

Verwendung von PHP zur Implementierung von SaaS: eine umfassende Analyse Verwendung von PHP zur Implementierung von SaaS: eine umfassende Analyse Mar 07, 2024 pm 10:18 PM

Es tut mir wirklich leid, dass ich keine Echtzeit-Programmieranleitung geben kann, aber ich kann Ihnen ein Codebeispiel zur Verfügung stellen, um Ihnen ein besseres Verständnis dafür zu vermitteln, wie Sie PHP zur Implementierung von SaaS verwenden. Es folgt ein Artikel mit 1.500 Wörtern und dem Titel „Verwendung von PHP zur Implementierung von SaaS: Eine umfassende Analyse“. Im heutigen Informationszeitalter ist SaaS (Software as a Service) zur gängigen Art der Softwarenutzung für Unternehmen und Privatpersonen geworden. Es bietet eine flexiblere und bequemere Möglichkeit, auf Software zuzugreifen. Mit SaaS müssen Benutzer nicht vor Ort sein

Detaillierte Erläuterung der Verwendung von Golang zur Implementierung der Datenexportfunktion Detaillierte Erläuterung der Verwendung von Golang zur Implementierung der Datenexportfunktion Feb 28, 2024 pm 01:42 PM

Titel: Detaillierte Erläuterung der Datenexportfunktion mit Golang. Mit der Verbesserung der Informatisierung müssen viele Unternehmen und Organisationen in Datenbanken gespeicherte Daten zur Datenanalyse, Berichtserstellung und anderen Zwecken exportieren. In diesem Artikel wird erläutert, wie die Programmiersprache Golang zum Implementieren der Datenexportfunktion verwendet wird, einschließlich detaillierter Schritte zum Herstellen einer Verbindung zur Datenbank, zum Abfragen von Daten und zum Exportieren von Daten in Dateien sowie zur Bereitstellung spezifischer Codebeispiele. Um zunächst eine Verbindung zur Datenbank herzustellen, müssen wir den in Golang bereitgestellten Datenbanktreiber verwenden, z. B. da

See all articles