PHP判斷一個請求是Ajax請求仍是普通請求

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

其它:PHP判斷一個請求是AJAX請求仍是普通請求 框架

經過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']

PHP中解決ajax請求session過時退出登陸問題

Java中解決(extjs或jquery)session過時退出登陸問題

相關文章
相關標籤/搜索