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:
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['callback']) ? trim($_GET['callback']) : ''; if(!empty($callback)) { $data = json_encode(array( 'uid' => 1, 'name' => '测试', )); 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:
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!