PHP怎样判断请求是ajax请求?
如果是jquery,可以用以下方式:
function isAjax(){
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest';
}
但如果不是jquery,比如是自己封装的ajax或者是其他的一些插件,未必会有这个变量,这个变量是怎么来的呢?其实它是jquery在发送ajax请求时,自动添加了一个叫X-Requested-With
的header:
这个header接收后,-
会变成_
,并且所有字母大写,并且在它前面加上HTTP_
,也就是HTTP_X_REQUESTED_WITH
,http发过来的header都会存在PHP的$_SERVER
全局变量中。
但是一般能发起ajax请求的插件应该都有这个变量的,因为我发现php的框架Yii2,里面,就是用这个判断的,所以X-Requested-With
应该是一个约定俗成的吧:
vendor/yiisoft/yii2/web/Request.php:
public function getIsAjax()
{
return $this->headers->get('X-Requested-With') === 'XMLHttpRequest';
}
所以如果是php框架,一般都会有封装好的方法让你判断是不是ajax请求的,比如Yii2的就是:
Yii::$app->request->isAjax
但是要注意,原生ajax肯定是没有这个header的,你可以自己测试:
var xhr = new XMLHttpRequest();
xhr.open('post', '', true);
//原生js要自己设置识别ajax的header
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.send();
所以如果是自己用原生js封装的,为了让后台识别,需要自己添加上这个header。
觉得文章对你有用的话鼓励一下我吧