Heim  >  Artikel  >  Backend-Entwicklung  >  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
coldplay.xixinach vorne
2020-08-06 15:55:042585Durchsuche

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];

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>

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

alert("I from b");

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>

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

a("from b");

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>

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});";
}

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>

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen