web-dev-qa-db-fra.com

Ajax est-il en WordPress

Existe-t-il de toute façon pour détecter si l'opération actuelle du serveur est actuellement une demande AJAX dans WordPress?

Par exemple:

is_ajax()
38
Racura

Si vous utilisez AJAX comme recommandé dans le codex , vous pouvez tester le DOING_AJAX constant:

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

WordPress 4.7 a introduit un moyen facile de vérifier les demandes AJAX, j'ai donc pensé ajouter à cette question plus ancienne .

wp_doing_ajax()

À partir de Référence développeur :

  • Description: détermine si la demande en cours est une demande WordPress Ajax.

  • Retour: (bool) True si c'est une demande WordPress Ajax, false sinon.

Il s'agit essentiellement d'un wrapper pour DOING_AJAX.

24
Nate Weller

Pour voir si la requête actuelle est une requête AJAX envoyée depuis une bibliothèque js (comme jQuery), vous pouvez essayer quelque chose comme ceci :

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

Je ne sais pas si WordPress a une fonction pour cela, mais cela peut être fait en créant vous-même une simple.

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

Je sais que c'est un vieux fil, mais il y a un problème avec la réponse acceptée,

La vérification de la constante DOING_AJAX définie sera toujours vraie, si la demande concerne le fichier admin-ajax.php. ( https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/admin-ajax.php#L16 )

Parfois, les hooks admin-ajax.php ne sont pas utilisés pour AJAX, juste un simple point de terminaison (Paypal IPN par exemple).

La bonne façon est ce que Ian et Spencer ont mentionné.

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

(aurait commenté ... mais pas de représentant)

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

Personnellement, je préfère la wp_doing_ajax(), mais voici un autre exemple qui devrait le faire.

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