45

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

例如:

is_ajax()
4

7 回答 7

96

更新:从 WordPress 4.7.0 开始,您可以调用函数wp_doing_ajax()。这是更可取的,因为以不同方式“执行 Ajax”的插件可以过滤以将“假”变为“真”。


原答案:

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

if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an Ajax call */ }
于 2013-01-16T01:07:36.073 回答
33

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

wp_doing_ajax()

来自开发者参考

  • 说明:判断当前请求是否为 WordPress Ajax 请求。

  • 返回:(bool) 如果是 WordPress Ajax 请求则为真,否则为假。

它本质上是 DOING_AJAX 的包装器。

于 2017-02-27T17:13:20.237 回答
16

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

if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
      strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
    //This is an ajax request.
}
于 2013-01-15T23:04:30.213 回答
6

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

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    // Is AJAX request
    return true; 
}
于 2013-01-15T23:02:22.103 回答
5

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

如果请求是对 admin-ajax.php 文件的请求,那么检查定义的 DOING_AJAX 常量将始终为真。(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.
}

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

于 2016-02-14T13:53:14.733 回答
4
if ( ! function_exists('is_ajax') ) {
    function is_ajax() {
        return defined( 'DOING_AJAX' );
    }
}
于 2014-10-25T08:14:23.887 回答
0

我个人更喜欢wp_doing_ajax(),但这是另一个应该这样做的例子。

if( true === strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin/admin-ajax.php' ) ) {
    // is doing ajax
}
于 2019-04-09T15:58:36.500 回答