RT。查了下很多資料裡提到可以區分的前提都是前端手動添加一個
x-requested-with
欄位到request header裡去,但是原生的xhr裡不帶這個頭的,所以想問下
如果前端不配合的情況下,後台可以直接判斷出來資料是form表單的submit提交還是利用ajax的post提交的嗎?
回複內容:
RT。查了下很多資料裡提到可以區分的前提都是前端手動添加一個x-requested-with
欄位到request header裡去,但是原生的xhr裡不帶這個頭的,所以想問下如果前端不配合的情況下,後台可以直接判斷出來資料是form表單的submit提交還是利用ajax的post提交的嗎?
並不能的,xhr也是執行了HTTP提交,預設情況的頭都是一樣的。不過如果你前端用的是JQ,那會加入x-requested-with的頭的。
嗯 輸出這個對比下 $_SERVER["HTTP_X_REQUESTED_WITH"]
public function isAjax(){ if (!isset($_SERVER["HTTP_X_REQUESTED_WITH"])) { return false; } $http_x_request = $_SERVER["HTTP_X_REQUESTED_WITH"]; if ( $http_x_request && strtoupper($http_x_request) == "XMLHTTPREQUEST") { return true; } return false;}
/** * Returns true if the request is a XMLHttpRequest. * * It works if your JavaScript library sets an X-Requested-With HTTP header. * It is known to work with common JavaScript frameworks: * * @link http://en.wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript * * @return bool true if the request is an XMLHttpRequest, false otherwise * * @api */public function isXmlHttpRequest(){ return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');}
laravel中AJAX的判斷,不是標準頭也是業內標準了。