>  기사  >  백엔드 개발  >  ThinkPHP에서 IS_AJAX를 사용하여 네이티브 JS의 Ajax 문제를 확인하는 방법

ThinkPHP에서 IS_AJAX를 사용하여 네이티브 JS의 Ajax 문제를 확인하는 방법

不言
不言앞으로
2019-01-12 10:13:294192검색

이 기사의 내용은 ThinkPHP에서 IS_AJAX를 사용하여 네이티브 JS의 Ajax 문제에 대한 해결책을 찾는 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

문제:

기본 js를 사용하여 ThinkPHP에서 Ajax 요청을 시작할 때 컨트롤러는 판단을 위해 IS_AJAX를 사용할 수 없습니다. jQuery에서 ajax를 사용하는 데에는 문제가 없습니다.

ThinkPHP에는 ajax 요청을 결정하는 상수 IS_AJAX가 있습니다.

Ajax 요청은 일반적으로 두 가지 상황에서 사용됩니다. 하나는 네이티브 js의 ajax 요청이고 다른 하나는 jQuery의 ajax 요청입니다.

분석:

jQuery에서 ajax를 사용하여 요청을 보낼 때 먼저 헤더 정보를 살펴보세요.

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
그런 다음 JS에서 기본 ajax를 사용하여 요청을 보낼 때 헤더 정보를 살펴보세요.
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
다시 확인하세요. TP에서 상수 IS_AJAX는 어떻게 정의됩니까?

tp3.2.3 버전에서는
ThinkPHPLibraryThinkApp.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);

다음을 찾을 수 있습니다.

jquery를 사용하여 ajax 요청, 네이티브 js에서 ajax를 사용하는 것보다 X-Requested-With: XMLHttpRequest 요청 헤더가 하나 더 많습니다.

그리고 ThinkPHP는 IS_AJAX 상수를 정의하기 위해 요청 헤더가 있는지 판단하는 원리를 사용합니다.

이 문제를 해결하는 방법은 무엇입니까?

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;
        }
    }
}

설정 후 요청 헤더 정보를 다시 보면 이전과 비교하면

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

문제가 하나 더 있습니다.

위 내용은 ThinkPHP에서 IS_AJAX를 사용하여 네이티브 JS의 Ajax 문제를 확인하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제