Javascript中大多數的框架如 jquery(jquery ui、jquery easyui)、Mootools 等,在發出 Ajax 請求時,都會發送額外的 HTTP_X_REQUESTED_WITH 頭部信息,所以每當發送一個ajax請求你就能夠在服務器端偵測到是 Ajax 請求; php
一、經過傳遞_GET參數的方法簡單實現網頁請求的判斷。
url上這麼傳遞:*******.php?ajax
php這麼判斷: html
if(isset($_GET['ajax'])){ ...這是一個ajax請求,而後... } else{ ...這不是一個ajax請求,而後... }
二、經過PHP獲取預約義變量中的XMLHttpRequest判讀。 jquery
首先你必須使用jquery或Js發送ajax請求,經過jquery發送的$.ajax, $.get or $.post方法請求網頁內容時,它會向服務器傳遞一個HTTP_X_REQUESTED_WITH的參數,這個參數的值是XMLHttpRequest。
代碼: ajax
beforeSend : function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("X_Requested_With","XMLHttpRequest"); };
參數名X_Requested_With,參數值XMLHttpRequest,你能夠任意定義。Php取得時候要在參數名前面加上大寫的http字樣(即一個「HTTP_」前綴)而後「X_Requested_With」這個變量所有大寫(必定要大寫),而後再$_SERVER這個超級變量中找就能夠了。 瀏覽器
代碼: 服務器
/** * 判斷是否Ajax請求 */ function is_ajax_request(){ if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { return true; } else { return false; } }若是你的jquery請求是經過iframe打開網頁的,那麼HTTP_X_REQUESTED_WITH參數不會被傳遞,也就是說你沒有辦法判斷請求的類型。
IE5,IE6老版本的瀏覽器中$.ajax, $.get or $.post方法不會自動發送HTTP_X_REQUESTED_WITH的參數到頭部信息,所以PHP中也是沒法獲取參數進行判斷。除非你本身構造XMLHttpRequest對象出來,而後再發送給php腳本,至關於用最原始的Js實現ajax功能。但這樣的話jquery框架原本封裝好的ajax就失去意義了。 session
經過jquery的$.ajax()方法,能夠輕鬆地在發送ajax請求以前,建立咱們自定義的header頭信息。 ide
$.ajax({ type : "GET", url : base_url + 'php_check_ajax_request/get_user_list.html', beforeSend : function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("request_type","ajax"); }, success : function(data){ $("#user_list").html(data); $tip.hide(); $button.attr('disabled',true); } });那麼在php中就應該這樣取得:
$_SERVER['HTTP_REQUEST_TYPE']