是WordPress中的Ajax

Rac*_*ura 41 php ajax wordpress

无论如何检测当前服务器操作当前是否是WordPress中的AJAX请求?

例如:

is_ajax()
Run Code Online (Sandbox Code Playgroud)

web*_*are 83

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

if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an Ajax call */ }
Run Code Online (Sandbox Code Playgroud)

  • +1为WordPress**具体.我忘了他提到他正在使用**WP**.这将是该环境中的首选方式. (3认同)

小智 28

WordPress 4.7引入了一种检查AJAX请求的简单方法,所以我想我会添加这个旧问题.

wp_doing_ajax()
Run Code Online (Sandbox Code Playgroud)

来自开发人员参考:

  • 描述:确定当前请求是否是WordPress Ajax请求.

  • 返回:(bool)如果是WordPress Ajax请求,则返回true,否则返回false.

它本质上是DOING_AJAX的包装器.


Spe*_*rin 15

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

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


Ian*_*ley 5

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

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    // Is AJAX request
    return true; 
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我知道这是一个老线程,但接受的答案存在问题,

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

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

正确的方式是伊恩和斯宾塞提到的.

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

(会评论......但没有代表)