이 기사의 내용은 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
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
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!