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()是記錄運行至此句代碼時的當前時間