在PHP程序中,如何判斷一個網頁請求是ajax請求還是普通請求?我們在做項目中經常會存在這樣一個問題,在浏覽器中直接輸入我ajax提交的地址後,浏覽器就能直接請求數據並將數據打印到頁面上。從程序的嚴謹性上和安全上來說,我覺得這樣非常不好。
但是由於水平有限,這個問題直到今天才被我解決,特此留下文章以供有此需要的人學習。
首先說說原理:在發送ajax請求的時候,我們可以通過XMLHttpRequest這個對象,創建自定義的header頭信息,如果您使用的是原生的ajax方法,也就是未使用jquery或者其他js框架包裝的ajax方法,那麼代碼如下:
xmlHttpRequest.setRequestHeader("request_type","ajax");
另外通過jquery包裝的$.ajax()方法,我們可以輕松地在發送ajax請求之前,創建我們自定義的header頭信息,示例如下:
$.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); } });
上面的代碼中有一句:
XMLHttpRequest.setRequestHeader(“request_type”,”ajax”);
這一句代碼就是向header頭信息裡面創建了一個我們自定義的一個變量“request_type”。這個變量在php中接收變量如下:
$_SERVER['HTTP_REQUEST_TYPE']
那麼對於本文所提出的的問題,我們就可以按下面這種方式來判斷用戶發送的請求是哪種方式了。
<?php if (isset($_SERVER['HTTP_REQUEST_TYPE']) && $_SERVER['HTTP_REQUEST_TYPE'] == "ajax"){ //ajax提交 }else{ //非ajax提交 }
需要說明的是 “request_type”這個變量值是我們自定義的,你還可以隨意自定義,比如“test”,“is_ajax”等等。