How to use IS_AJAX in ThinkPHP to determine the problem of Ajax in native JS

不言
Release: 2023-04-04 18:22:02
forward
4184 people have browsed it

The content of this article is about using IS_AJAX in ThinkPHP to determine the solution to Ajax problems in native JS. It has certain reference value. Friends in need can refer to it. Hope it helps.

Problem:

When using native js to initiate an Ajax request in ThinkPHP, the controller cannot use IS_AJAX for judgment. There is no problem using ajax in jQuery.

In ThinkPHP, there is a constant IS_AJAX that determines the ajax request;

Ajax requests are commonly used in two situations: one is the ajax request of native js, and the other is the ajax of jQuery ask.

Analysis:

First look at the header information when using ajax to send a request in 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
Copy after login
Then look at the use The header information when the native ajax in JS sends the request:
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
Copy after login
Then check how the constant IS_AJAX is defined in TP:

In the tp3.2.3 version
\ ThinkPHP\Library\Think\App.class.php (Line: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);
Copy after login

You will find the following:

Use jquery to send ajax When making a request, there is one more request header X-Requested-With: XMLHttpRequest than using ajax in native js.

And ThinkPHP uses the principle of judging whether there is a request header to define the constant IS_AJAX.

So how to solve this problem?

Set a corresponding request header information when sending an ajax request.

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;
        }
    }
}
Copy after login

After setting up, look at the request header information again. Compared with the previous one, there is one more

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
Copy after login

The problem is solved.

The above is the detailed content of How to use IS_AJAX in ThinkPHP to determine the problem of Ajax in native JS. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:cnblogs.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template