So verwenden Sie IS_AJAX in ThinkPHP, um das Problem von Ajax in nativem JS zu ermitteln

不言
Freigeben: 2023-04-04 18:22:02
nach vorne
4195 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit der Verwendung von IS_AJAX in ThinkPHP, um die Lösung für Ajax-Probleme in nativem JS zu ermitteln. Ich hoffe, es hilft.

Problem:

Wenn natives js zum Initiieren einer Ajax-Anfrage in ThinkPHP verwendet wird, kann der Controller IS_AJAX nicht zur Beurteilung verwenden. Die Verwendung von Ajax in jQuery ist kein Problem.

In ThinkPHP gibt es eine Konstante IS_AJAX, die die Ajax-Anfrage bestimmt.

Es gibt zwei häufige Situationen für Ajax-Anfragen: eine ist die Ajax-Anfrage von nativem js und die andere ist die Ajax-Anfrage von jQuery fragen.

Analyse:

Schauen Sie sich zuerst die Header-Informationen an, wenn Sie Ajax zum Senden einer Anfrage in jQuery verwenden:

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
Nach dem Login kopieren
Sehen Sie sich die Verwendung an noch einmal Die Header-Informationen, wenn das native Ajax in JS eine Anfrage sendet:
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
Nach dem Login kopieren
Überprüfen Sie, wie die Konstante IS_AJAX in TP definiert ist:

In der tp3.2.3-Version
ThinkPHPLibraryThinkApp .class.php (Zeile: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);
Nach dem Login kopieren

Sie finden Folgendes:

Wenn Sie JQuery zum Senden von Ajax-Anfragen verwenden, ist dies der Fall Besser als die Verwendung von nativem Ajax in js hat einen weiteren Anforderungsheader X-Requested-With: XMLHttpRequest.

Und ThinkPHP verwendet das Prinzip der Beurteilung, ob ein Anforderungsheader vorhanden ist, um die Konstante IS_AJAX zu definieren.

Wie kann man dieses Problem lösen?

Legen Sie beim Senden einer Ajax-Anfrage entsprechende Anforderungsheaderinformationen fest.

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;
        }
    }
}
Nach dem Login kopieren

Sehen Sie sich nach dem Einrichten noch einmal die Informationen im Anforderungsheader an. Im Vergleich zum vorherigen gibt es noch ein weiteres

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
Nach dem Login kopieren

Das Problem ist gelöst .

Das obige ist der detaillierte Inhalt vonSo verwenden Sie IS_AJAX in ThinkPHP, um das Problem von Ajax in nativem JS zu ermitteln. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage