Heim > Backend-Entwicklung > PHP-Tutorial > Analyse von JSONP-Beispielen für domänenübergreifende Ajax-Lösungen unter PHP

Analyse von JSONP-Beispielen für domänenübergreifende Ajax-Lösungen unter PHP

coldplay.xixi
Freigeben: 2023-04-09 12:56:01
nach vorne
2731 Leute haben es durchsucht

Analyse von JSONP-Beispielen für domänenübergreifende Ajax-Lösungen unter PHP

Dieser Artikel beschreibt die domänenübergreifende Ajax-Lösung jsonp unter PHP. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Lassen Sie mich zunächst den Unterschied zwischen JSON und JSONP erklären.

json ist eine textbasierte Datenaustauschmethode bzw. ein Format zur Beschreibung von Daten.

Verwandte Lernempfehlungen: php-Programmierung (Video)

var person = {
  "name": "test",
  "age": "25",
  "sex": "男"
};

var data = [1, 2, 3, 4, 5];
Nach dem Login kopieren

Und jsonp ist ein inoffizielles domänenübergreifendes Dateninteraktionsprotokoll. Dieses Protokoll ermöglicht es Benutzern, einen Rückrufparameter an den Server zu übergeben, und der Server gibt dann den zurück data Verwenden Sie diesen Rückrufparameter als Funktionsnamen, um die JSON-Daten zu umschließen, sodass der Client seine eigene Funktion anpassen kann, um die zurückgegebenen Daten automatisch zu verarbeiten.

Zum Beispiel habe ich auf der Website von a.com ein b.js von b.com zitiert, aber ein solcher domänenübergreifender Verweis verursacht keinen Fehler, was bedeutet, dass beim Aufrufen der js-Datei keine Auswirkungen darauf auftreten domänenübergreifend.

<script type="text/javascript" src="http://www.b.com/b.js"></script>
Nach dem Login kopieren

Dann fügen wir den folgenden Code in b.js hinzu, um zu sehen, ob er ausgeführt werden kann

alert("I from b");
Nach dem Login kopieren

Es ist sicher, dass er ausführbar ist.

Wenn wir also eine js-Funktion auf a.com erstellen und sie in b.js unter b.com aufrufen, ist das machbar? Die index.html unter

a.com lautet wie folgt:




  
  


  
  <script type="text/javascript" src="http://www.b.com/b.js"></script>

Nach dem Login kopieren

Die b.js unter b.com lautet wie folgt:

a("from b");
Nach dem Login kopieren

Das Obige kann auch ausgeführt werden tatsächlich korrekt in Funktion a übertragen.

Das Problem tritt erneut auf. Der in a.com erstellte Funktionsname muss mit dem in b.js aufgerufenen Funktionsnamen übereinstimmen Adressleiste. Der vorherige Callback=Funktionsname wird übergeben. Natürlich kann der Namensrückruf geändert werden, aber da jeder ihn so benennt, handelt es sich um eine Konvention. Die index.html unter

a.com lautet wie folgt:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <script type="text/javascript">
    function a(data) {
      alert("uid :" + data.uid + "name :" + data.name);
    }
  </script>

  <!-- 注意这里把b.js改成b.php了 -->
  <script type="text/javascript" src="http://www.b.com/b.php?callback=a"></script>
</body>
</html>
Nach dem Login kopieren

b.php unter b.com lautet wie folgt:

<?php
$callback = !empty($_GET[&#39;callback&#39;]) ? trim($_GET[&#39;callback&#39;]) : &#39;&#39;;

if(!empty($callback)) {
  $data = json_encode(array(
    &#39;uid&#39; => 1,
    &#39;name&#39; => &#39;测试&#39;,
  ));

  echo "{$callback}({$data});";
}
Nach dem Login kopieren

Nachdem Sie den Namen der Rückruffunktion kennen, kann der b.com-Server ausgeführt werden Verarbeitet die Daten und gibt sie dann durch Zeichenfolgenverkettung aus.

jsonp-Unterstützung wurde in jquery bereitgestellt. Die index.html unter a.com lautet wie folgt:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <p class="info"></p>
  <script type="text/javascript" src="http://www.b.com/jquery.js"></script>
  <script type="text/javascript">
  $.ajax({
    dataType: "jsonp",
    url: "http://www.b.com/b.php",
    jsonp: "callback",
    success: function(data) {
      $(".info").text("uid:" + data.uid + " name:" + data.name);
    }
  });
  </script>
</body>
</html>
Nach dem Login kopieren

Die domänenübergreifende Richtlinieneinschränkungstabelle lautet wie folgt:

http://www.a.com/a.js http://script.a.com/b.jshttp://www.a.com/a.js http://a.com/b.jshttp://www.a.com/a.js http://www.b.com/b.js
URL Beschreibung Kommunikation zulassen
http://www.a.com/a.js
http://www.a.com/b.js
unter demselben Domainnamen erlaubt
http://www.a.com/lab/a.js
http://www.a.com/script/b.js
Verschiedene Ordner unter demselben Domainnamen erlaubt
http://www.a.com:8000/a.js
http://www.a.com/b.js
Gleicher Domainname, unterschiedliche Ports nicht zulässig
http://www.a.com/a.js
https://www.a.com/b.js
Gleicher Domainname, unterschiedliche Protokolle nicht zulässig
http://www.a.com/a.js
http://127.0.0.100/b.js
Der Domänenname und die entsprechende IP des Domänennamens sind nicht zulässig

Gleiche Hauptdomain, verschiedene Subdomains
Nicht erlaubt

Gleicher Domainname, verschiedene Second-Level-Domainnamen (wie oben)
Nicht zulässig

Unterschiedliche Domainnamen
nicht zulässig

Das obige ist der detaillierte Inhalt vonAnalyse von JSONP-Beispielen für domänenübergreifende Ajax-Lösungen unter PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage