Analyse d'exemples jsonp de solutions multi-domaines ajax sous PHP

coldplay.xixi
Libérer: 2023-04-09 12:56:01
avant
2690 Les gens l'ont consulté

Analyse d'exemples jsonp de solutions multi-domaines ajax sous PHP

L'exemple de cet article décrit la solution inter-domaines ajax jsonp sous PHP. Partagez-le avec tout le monde pour référence, les détails sont les suivants :

Tout d'abord, laissez-moi vous expliquer la différence entre json et jsonp ?

Json est une méthode d'échange de données basée sur du texte, ou un format pour décrire des données.

Recommandations d'apprentissage associées : programmation php (vidéo)

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

var data = [1, 2, 3, 4, 5];
Copier après la connexion

Et jsonp est un protocole non officiel d'interaction de données inter-domaines qui permet à l'utilisateur de passer un paramètre de rappel au serveur, puis lorsque le serveur renvoie des données, il utilisera ce paramètre de rappel comme nom de fonction pour envelopper les données json, afin que le client puisse personnaliser sa propre fonction pour traiter automatiquement les données renvoyées.

Par exemple, j'ai cité un b.js de b.com sur le site a.com, mais une telle référence inter-domaines ne provoquera pas d'erreur, ce qui signifie que lors de l'appel du fichier js, il ne pas être affecté par le cross-domain.

<script type="text/javascript" src="http://www.b.com/b.js"></script>
Copier après la connexion

Ensuite, nous ajoutons le code suivant dans b.js pour voir s'il peut être exécuté

alert("I from b");
Copier après la connexion

Assurez-vous qu'il peut être exécuté.

Donc, si nous créons une fonction js sur a.com et l'appelons dans b.js sous b.com, est-ce faisable ?

L'index.html sous a.com est le suivant :




  
  


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

Copier après la connexion

Le b.js sous b.com est le suivant :

a("from b");
Copier après la connexion

Ce qui précède peut également être exécuté , nous pouvons voir que les données dans b.js sont effectivement transmises pour fonctionner correctement.

Le problème revient. Le nom de la fonction créée dans a.com doit être le même que le nom de la fonction appelée dans b.js. Alors, comment pouvons-nous faire connaître ce nom de fonction au serveur b.com ? ne se faire que via la barre d'adresse. Passé, ajoutez un nom de rappel = fonction à passer. Bien sûr, le rappel du nom peut être modifié, mais comme tout le monde le nomme ainsi, il s'agit d'une convention.

L'index.html sous a.com est le suivant :

<!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>
Copier après la connexion

Le b.php sous b.com est le suivant :

<?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});";
}
Copier après la connexion

Ce qui précède peut également être exécuté , connaissant le nom de la fonction de rappel, le serveur b.com traite les données puis les génère par concaténation de chaînes.

jquery prend déjà en charge jsonp. Le fichier index.html sous a.com est le suivant :

<!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>
Copier après la connexion

Le tableau des restrictions de politique inter-domaines est le suivant :

URL Description Autoriser la communication
http:// www.a.com/a.js
http://www.a.com/b.js
Sous le même nom de domaine autorisé
http://www.a .com /lab/a.js
http://www.a.com/script/b.js
Différents dossiers sous le même nom de domaine Autoriser
http:/ /www.a.com:8000/a.js
http://www.a.com/b.js
Même nom de domaine, ports différents Non autorisé
http://www .a.com/a.js
https://www.a.com/b.js
Même nom de domaine, protocoles différents Interdit
http://www .a.com/a.js
http://127.0.0.100/b.js
Nom de domaine et nom de domaine IP correspondant Non autorisé
http://www. a.com/a.js
http://script.a.com/b.js
Même domaine principal, différents sous-domaines Non autorisé
http://www .a.com/a.js
http://a.com/b.js
Même nom de domaine, noms de domaine de deuxième niveau différents (comme ci-dessus) Non autorisé
http://www.a.com/a.js
http://www.b.com/b.js
Noms de domaine différents non autorisés

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal