Maison > développement back-end > tutoriel php > Explication détaillée du traitement PHP des requêtes Ajax et des problèmes inter-domaines Ajax

Explication détaillée du traitement PHP des requêtes Ajax et des problèmes inter-domaines Ajax

墨辰丷
Libérer: 2023-03-27 22:56:01
original
1430 Les gens l'ont consulté

Cet article présente principalement les informations pertinentes sur le traitement des requêtes Ajax par PHP et les problèmes inter-domaines Ajax. Il est très bon et a une valeur de référence. Les amis dans le besoin peuvent s'y référer

. Jugement PHP Qu'il s'agisse d'une requête Ajax

Nous savons que lors de l'envoi d'une requête ajax, vous pouvez créer des informations d'en-tête personnalisées via l'objet XMLHttpRequest dans le framework jquery, pour $ qui y sont transmis. Lorsque la méthode .ajax, $.get ou $.post demande le contenu d'une page Web, elle transmet un paramètre HTTP_X_REQUESTED_WITH au serveur. En PHP, il est jugé au niveau de l'en-tête s'il s'agit d'une requête ajax et du jugement correspondant. est basé sur $_SERVER['HTTP_X_REQUESTED_WITH']. De manière générale, $_SERVER['HTTP_X_REQUESTED_WITH'] est par défaut XMLHttpRequest,$_SERVER['HTTP_X_REQUESTED_WITH'] et peut également être personnalisé à l'aide de XMLHttpRequest.setRequestHeader(name,value).

Exemple : La page front-end envoie une requête ajax normale au test.php back-end.

$.ajax({
  type: "GET",
  url: 'test.php',
  success: function(data) {
    console.log(data);
  }
});
Copier après la connexion

Le serveur test.php peut déterminer si la requête est une requête asynchrone Ajax, puis répondre en fonction des besoins de l'entreprise.

Voici le code pour vérifier simplement si le serveur test.php est une requête ajax :

function isAjax() {
  return @$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ? true : false;
}
if (isAjax()) {
  echo 'Ajax Request Success.';
} else {
  echo 'No.';
}
Copier après la connexion

Ajax initie une requête inter-domaine JSONP

Nous pouvons implémenter des requêtes ajax inter-domaines via la méthode JSONP de jQuery, et le PHP côté serveur doit également les gérer en conséquence, ce qui signifie que le côté PHP doit être La page frontale demande et renvoie les données selon un certain format.

Exemple : La page frontale initie une requête JSONP :

$.ajax({
  type: "get",
  data: "random="+Math.random(),
  url: "http://demo.jb51.net/phpajax/jsonp.php",
  dataType: "jsonp",
  jsonp: "callback",
  success: function(data) {
   console.log(data);
  },
  error: function() {
   console.log('Request Error.');
  }
});
Copier après la connexion

Nous constaterons que les paramètres de requête ajax incluent dataType : "jsonp" et jsonp : "callback", cela indique que ce que je veux demander est jsonp, et un rappel sera renvoyé. Bien entendu, nous pouvons également personnaliser la fonction de rappel, comme jsonpCallback : "success_jsonpCallback"

ou simplement écrire :

jQuery.getJSON('http://demo.jb51.net/phpajax/jsonp.php?callback=?",{
 random: Math.random()
}, function(data){
 console.log(data);
});
Copier après la connexion

php Le code du service backend peut être écrit comme ceci (faites attention au format du retour de sortie) :

$data = array(
  'rand' => $_GET['random'],
  'msg' => 'Success'
);
echo $_GET['callback'].'('.json_encode($data).')';
Copier après la connexion

Ajax cross -demande de domaine : CORS

CORS, également connu sous le nom de partage de ressources d'origine croisée, le nom anglais complet est Partage de ressources d'origine croisée. Supposons que nous souhaitions utiliser Ajax pour demander des données de la page de a.com à la page de b.com. Habituellement, en raison de la politique de même origine, ce type de demande n'est pas autorisé et le navigateur renverra également un ". erreur de non-concordance de source. D’où le terme « cross-domain ». Mais nous avons aussi une solution. Nous pouvons ajouter une ligne de code aux informations d'en-tête de la page de b.com :

header("Access-Control-Allow-Origin: *");
Copier après la connexion

Lorsque l'en-tête est défini. Ce sont les informations ci-dessus. À ce stade, nous pouvons traiter et répondre à toute demande côté serveur. Vous pouvez ensuite voir ses paramètres d'informations d'en-tête dans l'outil de débogage. L'une des informations dans la zone rouge est "*Access-Control". -Allow-Origin:* », indiquant que nous avons activé CORS. Si vous souhaitez limiter les requêtes à un seul certain nom de domaine, vous pouvez le faire :

header("Access-Control-Allow-Origin: http://www.jb51.net");
Copier après la connexion

<🎜. >

Exemple : requêtes inter-domaines via CORS Data

$.ajax({
  type: "get",
  data: "random="+Math.random(),
  url: "http://demo.jb51.net/phpajax/ajax.php",
  dataType: "json",
  success: function(data) {
    console.log(data);
    $("#result_3").html(data.msg+&#39;:&#39;+data.rand);
  },
  error: function() {
   $("#result_3").html(&#39;Request Error.&#39;);
  }
});
Copier après la connexion

Nous ajoutons ce code à ajax.php sous un autre nom de domaine de site Web :

header("Access-Control-Allow-Origin: http://www.jb51.net");
$data = array(
  'rand' => $_GET['random'],
  'msg' => 'Success'
);
echo json_encode($data);
Copier après la connexion

Cela permet d'effectuer une requête asynchrone inter-domaines depuis la page www.jb51.net vers le chemin du nom de domaine demo.jb51.net/phpajax /ajax.php, et une réponse est obtenue.

Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.


Recommandations associées :

Comment définir les paramètres proxyTable avec vueCross-domain

Configuration côté serveur pour implémenter AJAXCross-domainrequête

Résoudre le problème d'ajaxcross- domaine demande de perte de cookie de données

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:php.cn
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