Maison > Article > développement back-end > Explication détaillée du traitement PHP des requêtes Ajax et des problèmes inter-domaines Ajax
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); } });
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.'; }
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.'); } });
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); });
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).')';
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: *");
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");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+':'+data.rand); }, error: function() { $("#result_3").html('Request Error.'); } });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);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.
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!