Le contenu de cet article concerne l'utilisation de IS_AJAX dans ThinkPHP pour déterminer la solution aux problèmes Ajax dans JS natif. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Problème :
Lors de l'utilisation de js natif pour lancer une requête Ajax dans ThinkPHP, le contrôleur ne peut pas utiliser IS_AJAX pour le jugement. Il n'y a aucun problème à utiliser ajax dans jQuery.
Dans ThinkPHP, il existe une constante IS_AJAX qui détermine la requête ajax
Il existe deux situations courantes pour les requêtes Ajax : l'une est la requête ajax de js natif et l'autre est l'ajax ; de jQuery demander.
Analyse :
Regardez d'abord les informations d'en-tête lorsque vous utilisez ajax pour envoyer une requête dans jQuery :
Accept: application/json, text/javascript, */*; q=0.01 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive Content-Length: 22 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Cookie: PHPSESSID=ns9mjve234erh0qerlcl180v52 Host: localhost Origin: http://localhost Referer: http://localhost/ok/ User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/547.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/547.36 X-Requested-With: XMLHttpRequest
Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive Cookie: PHPSESSID=ns9mjve234erh0qerlcl180v52 Host: localhost Referer: http://localhost/tp/ User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/547.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/547.36
en version tp3.2.3
ThinkPHPLibraryThinkApp.class.php (Ligne : 49)
define('IS_AJAX', ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || !empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')])) ? true : false);
Vous trouverez ce qui suit :
Utilisez jquery pour envoyer requête ajax Lors de l'utilisation, il y a un en-tête de requête X-Requested-With: XMLHttpRequest de plus que l'utilisation d'ajax dans js natif.
Et ThinkPHP utilise le principe de juger s'il existe un en-tête de requête pour définir la constante IS_AJAX.
Définissez les informations d'en-tête de requête correspondantes lors de l'envoi d'une requête ajax.
function page( page ) { var ajax = new XMLHttpRequest() ajax.open( 'get', '__URL__/show?page='+page, true ) ajax.setRequestHeader("X-Requested-With", "XMLHttpRequest"); ajax.send() ajax.onreadystatechange = function () { if ( ajax.readyState == 4 && ajax.status == 200 ) { document.getElementById( 'box' ).innerHTML = ajax.responseText; } } }
Après l'avoir configuré, regardez à nouveau les informations d'en-tête de la demande. Par rapport à la précédente, il y en a un de plus
Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive Cookie: PHPSESSID=ns9mjve234erh0qerlcl180v52 Host: localhost Referer: http://localhost/tp/index.php/Home/Index/show User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/547.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/547.36 X-Requested-With: XMLHttpRequest
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!