在控制器中判斷請求是否是通過 AJAX 提交,ThinkPHP(3.2.2)中在 ThinkPHP/Library/Think/App.class.php (Line:49) 中定義了常量 IS_AJAX:
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);
通過檢測 $_SERVER['HTTP_X_REQUESTED_WITH'] 的值是否是 XMLHttpRequest來判斷,或者通過檢測是否存在通過 POST 或者 GET 傳遞的 C('VAR_AJAX_SUBMIT') 的值來判斷,該值是寫在配置文件 ThinkPHP/Conf/convention.php(Line:159) 中:
defined('THINK_PATH') or exit(); return array( //.... /* 系統變量名稱設置 */ //.... 'VAR_AJAX_SUBMIT' => 'ajax', // 默認的AJAX提交變量 //... );
控制器(如果不是通過 AJAX 提交,則報錯):
if(!is_AJAX){ $this->error("非法請求"); }
可以測試通過 AJAX 發送請求時,服務器端 $_SERVER['HTTP_X_REQUESTED_WITH'] 的值(控制器):
$data =$_SERVER['HTTP_X_REQUESTED_WITH']; $this->ajaxReturn($data);
在瀏覽器中通過觀察 HTTP 響應: