PHP怎样判断请求是ajax请求?

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:

Xnip2019-01-03_23-27-27.jpg

这个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。

打赏

Leave a Reply

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
Notify of

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

PHP怎样判断请求是ajax请求?