如何检测它是否是WordPress中的AJAX请求


How to detect if it is an AJAX request in WordPress?

是否有方法检测当前服务器操作是否当前是WordPress中的AJAX请求?

例如:

is_ajax()

更新:从WordPress 4.7.0开始,你可以调用函数wp_doing_ajax()。这是可取的,因为"做Ajax"不同的插件可以过滤把"假"变成"真"。


原始回答:

如果您按照指南中的建议使用Ajax,那么您可以测试DOING_AJAX常量:

if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an Ajax call */ }

WordPress 4.7引入了一种简单的方法来检查AJAX请求,所以我想我应该添加这个老问题。

wp_doing_ajax()

来自开发者参考:

  • Description:判断当前请求是否为WordPress Ajax请求

  • Return:(bool)如果是WordPress Ajax请求,则为True,否则为false。

它本质上是DOING_AJAX的包装器

要查看当前请求是否是从js库(如jQuery)发送的AJAX请求,您可以尝试这样做:

if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
      strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
    //This is an ajax request.
}

我知道这是一个旧的线程,但是有一个问题与接受的答案,

检查定义的DOING_AJAX常量将始终为true,如果请求是针对admin-ajax.php文件。# L16 (https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/admin-ajax.php)

有时admin-ajax.php钩子不用于AJAX请求,只是一个简单的端点(例如Paypal IPN)。

正确的方法是Ian和Spencer所提到的。

if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
      strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
    //This is an ajax request.
}

(会注释…

我不确定WordPress是否有这个功能,但它可以通过自己创建一个简单的功能来完成。

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    // Is AJAX request
    return true; 
}
if ( ! function_exists('is_ajax') ) {
    function is_ajax() {
        return defined( 'DOING_AJAX' );
    }
}

我个人更喜欢wp_doing_ajax(),但这里有另一个例子可以做到这一点。

if( true === strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin/admin-ajax.php' ) ) {
    // is doing ajax
}