標籤:內容 前台 pre cms header 學習 檢查 傳值 工作
2017小端午假期剛過,新的一輪工作又開始了,But,上三天又休息了,激動ing^^
FineCMS學習第二節:M_Controller學習:
今天在M_Controller內遇到如下代碼,故對如何判斷ajax請求,post請求及REQUEST_TIME於time()函數差別做了一下學習,再次記錄給大家參考
define(‘IS_AJAX‘, $this->input->is_ajax_request());define(‘IS_POST‘, $_SERVER[‘REQUEST_METHOD‘] == ‘POST‘ && count($_POST) ? TRUE : FALSE);define(‘SYS_TIME‘, $_SERVER[‘REQUEST_TIME‘] ? $_SERVER[‘REQUEST_TIME‘] : time());
is_ajax_request()方法是CI內判斷是否ajax請求的一種方法,官方文檔對於它的解釋是:檢查伺服器頭中是否含有 HTTP_X_REQUESTED_WITH ,如果有返回 TRUE ,否則返回 FALSE 。
當然,這樣的判斷是不夠完善的,涉及到判斷的原理如下:
當我們通過jquery發送ajax請求時,會在要求標頭部添加一個名為 X-Requested-With 的資訊,資訊預設內容為:XMLHttpRequest,這是CI架構對於ajax請求判斷的依據,但是,當我們用原生js時如何進行判斷呢?
xmlHttpRequest.setRequestHeader("request_type","ajax");
根據XMLHttpRequest對象,手動進行頭部設定,如上設定完成後,我們可以再PHP邏輯代碼中如下擷取:
$_SERVER[‘HTTP_REQUEST_TYPE‘]
很明顯,我們在頭部設定的request_type在後台擷取時,加上HTTP_的前置字串,即可擷取到前台發送的Header資訊,即通過調用$_SERVER[‘HTTP_REQUEST_TYPE‘]得到前台傳值:ajax,當然request_type也可以自行設定為別的欄位。
在學習中,發現跨域請求時,這種方法是不能使用的,後續學習後再行補充!
===========================================分割線==================================
POST與GET請求判斷:
搜尋了一圈,簡單對此有瞭解,決定現在次標註一下,學習完《圖解HTTP》以後再進行詳細解析
===========================================分割線==================================
$_SERVER["REQUEST_TIME"]與time()同樣是返回自從 Unix 紀元(格林威治時間 1970 年 1 月 1 日 00:00:00)到目前時間的秒數
其中$_SERVER["REQUEST_TIME"]從PHP 5.1.0有效
其中$_SERVER["REQUEST_TIME"]記錄了請求的發送時間,而time()是記錄運行至此句代碼時的目前時間
php ajax請求判斷