Is Ajax in WordPress

2019-02-11 10:25发布

问题:

Is there anyway to detect if the current server operation is currently an AJAX request in WordPress?

For example:

is_ajax()

回答1:

If you're using AJAX as recommended in the codex, then you can test for the DOING_AJAX constant:

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


回答2:

WordPress 4.7 has introduced an easy way to check for AJAX requests, so I thought I would add to this older question.

wp_doing_ajax()

From the Developer Reference:

  • Description: Determines whether the current request is a WordPress Ajax request.

  • Return: (bool) True if it's a WordPress Ajax request, false otherwise.

It is essentially a wrapper for DOING_AJAX.



回答3:

To see if the current request is an AJAX request sent from a js library ( like jQuery ), you could try something like this:

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


回答4:

I am not sure if WordPress has a function for this but it can be done by creating a simple one yourself.

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


回答5:

I know this is an old thread, but there is an issue with the accepted answer,

Checking for the defined DOING_AJAX constant will always be true, if the request is to the admin-ajax.php file. (https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/admin-ajax.php#L16)

Sometimes admin-ajax.php hooks aren't used for AJAX request, just a simple endpoint (Paypal IPN for example).

The correct way is what Ian and Spencer have mentioned.

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

(would have commented... but no rep)



回答6:

if ( ! function_exists('is_ajax') ) {
    function is_ajax() {
        return defined( 'DOING_AJAX' );
    }
}