MENU

原生PHP、Yii、Laravel如何判断是否为Ajax请求

June 28, 2019 • PHP

Ajax的原理

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。

更多信息请查看http://www.cnblogs.com/mingmingruyuedlut/archive/2011/10/18/2216553.html

PHP如何判断ajax请求

在jquery框架中,对于通过它的$.ajax, $.get, or $.post方法请求网页内容时,它会向服务器传递一个HTTP_X_REQUESTED_WITH的参数,你可以利用如下方法判断某个请求是ajax请求还是普通请求:

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
   && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    ..这是一个ajax请求,然后...
} else {
    ..这不是一个ajax请求,然后...
}

Yii2判断是否ajax请求

/**
 * Returns whether this is an AJAX (XMLHttpRequest) request.
 *
 * Note that jQuery doesn't set the header in case of cross domain
 * requests: https://stackoverflow.com/questions/8163703/cross-domain-ajax-doesnt-send-x-requested-with-header
 *
 * @return boolean whether this is an AJAX (XMLHttpRequest) request.
 */
public function getIsAjax()
{
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
        && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest';
}

laravel判断是否ajax请求

/**
 * Determine if the request is the result of an AJAX call.
 *
 * @return bool
 */
public function ajax()
{
    return $this->isXmlHttpRequest();
}
/**
 * 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
 */
public function isXmlHttpRequest()
{
    return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
}

这里有一个另外需要注意的问题,就是如果你的jquery请求是通过iframe打开网页的,那么HTTP_X_REQUESTED_WITH参数不会被传递,也就是说你没有办法判断请求的类型。

Last Modified: November 10, 2019