Maison >interface Web >js tutoriel >Comment JSONP peut-il résoudre les problèmes de communication AJAX inter-domaines de jQuery ?

Comment JSONP peut-il résoudre les problèmes de communication AJAX inter-domaines de jQuery ?

DDD
DDDoriginal
2024-12-22 18:40:10526parcourir

How Can JSONP Solve jQuery's Cross-Domain AJAX Communication Problems?

Défi de communication inter-domaines jQuery AJAX

Lorsque vous rencontrez des requêtes AJAX inter-domaines, où un document HTML d'un domaine tente de créer un demande vers un domaine différent, des difficultés surviennent. Explorons un scénario avec deux fichiers PHP, test.php et testserver.php :

test.php:

<script src="scripts/jq.js" type="text/javascript"></script>
<script>
  $(function() {
    $.ajax({
      url: "testserver.php",
      success: function() {alert("Success")},
      error: function() {alert("Error")},
      dataType: "json",
      type: "get"
    });
  });
</script>

testserver.php :

<?php
$arr = array("element1", "element2", array("element31", "element32"));
$arr['name'] = "response";
echo json_encode($arr);
?>

Lorsque les deux fichiers sont hébergés sur le même serveur, la requête AJAX réussit. Cependant, lorsqu'ils sont placés sur des serveurs différents, la requête échoue, déclenchant l'alerte « Erreur ». Cela est dû à la politique de même origine (SOP) du navigateur, qui restreint le partage de données entre domaines.

Solution : utiliser JSONP

Pour surmonter la SOP, nous pouvons utilisez JSONP (JSON avec rembourrage). JSONP permet d'envoyer des données sous forme d'appel de fonction, contournant ainsi les restrictions imposées par le SOP.

jQuery :

$.ajax({
  url: "testserver.php",
  dataType: 'jsonp', // Notice! JSONP < - P (lowercase)
  success: function(json){
    // do stuff with json (in this case an array)
    alert("Success");
  },
  error: function(){
    alert("Error");
  }
});

PHP :

<?php
$arr = array("element1", "element2", array("element31", "element32"));
$arr['name'] = "response";
echo $_GET['callback'] . "(" . json_encode($arr) . ");";
?>

Dans ce code modifié, la requête JavaScript inclut 'dataType: 'jsonp'' pour indiquer l'utilisation de JSONP. Le script PHP récupère le nom de la fonction de rappel envoyé par jQuery via '$_GET['callback']' et l'utilise pour former la sortie. La sortie du script PHP doit apparaître sous la forme d'une fonction de rappel suivie des données JSON, garantissant que les données sont transférées sous forme d'appel de fonction.

Alternativement, jQuery fournit la méthode $.getJSON(), un raccourci pour la gestion Requêtes JSONP. Cependant, l'URL doit inclure « callback=? » en tant que paramètre GET, où jQuery insère dynamiquement sa propre méthode de rappel.

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!

Déclaration:
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