Maison  >  Article  >  développement back-end  >  Comment utiliser IS_AJAX dans ThinkPHP pour déterminer le problème d'Ajax dans JS natif

Comment utiliser IS_AJAX dans ThinkPHP pour déterminer le problème d'Ajax dans JS natif

不言
不言avant
2019-01-12 10:13:294197parcourir

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
Regardez à nouveau Regardez les informations d'en-tête lors de l'envoi d'une requête en utilisant ajax natif en JS :
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
Regardez ensuite comment la constante IS_AJAX est définie dans TP :

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.

Alors comment résoudre ce problème ?

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

. Le problème est résolu.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer