¿Cómo detectar si es una solicitud AJAX en WordPress?

4 minutos de lectura

¿Como detectar si es una solicitud AJAX en WordPress
Racura

¿Hay alguna forma de detectar si la operación actual del servidor es actualmente una solicitud AJAX en WordPress?

Por ejemplo:

is_ajax()

  • si qué es actualmente una solicitud de ajax? “eso” puede significar cualquier cosa. y ¿dónde/por qué necesitas verificar esto?

    –Jonathan Kuhn

    15 de enero de 2013 a las 22:58


  • Parece que, por la redacción de su pregunta, no está completamente seguro de qué es AJAX. Sugiero mirar esto: w3schools.com/ajax/default.asp

    – SSH Esto

    15 de enero de 2013 a las 22:59

  • Este artículo no hace un cheque para ello, así que tal vez no sea necesario? Si está utilizando jQuery, siempre puede agregar un ?ajax=1 cuando llame al servidor, si lo desea.

    – mitad

    15 de enero de 2013 a las 22:59


  • wikihow.com/Ask-a-Question-Intelligently

    –Jonathan Kuhn

    15/01/2013 a las 23:00

  • Amigos, creo que lo que se pregunta es “¿esta solicitud de servidor es el resultado de una solicitud de página o una solicitud de AJAX”. Pregunta perfectamente razonable, aunque estoy de acuerdo en que podría tener un poco más de detalle. Sin embargo, haré +1 ya que no lo he visto aquí antes, y para desalentar la votación negativa apresurada.

    – mitad

    15/01/2013 a las 23:00


¿Como detectar si es una solicitud AJAX en WordPress
consciente de la web

Actualización: desde WordPress 4.7.0 puedes llamar a una función wp_haciendo_ajax(). Esto es preferible porque los complementos que “hacen Ajax” de manera diferente pueden filtrar para convertir un “falso” en un “verdadero”.


Respuesta original:

Si estás usando Ajax como se recomienda en el códiceentonces puedes probar el DOING_AJAX constante:

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

  • +1 por ser WordPress específico. Olvidé que mencionó que estaba usando WP. Esta sería la forma preferida en ese entorno.

    – Spencer Cameron-Morin

    16 de enero de 2013 a las 2:40

  • No se menciona en ese enlace. Ayer busqué esto para esta pregunta: ¿realmente hay documentos de WP sobre esto, lo sabes?

    – mitad

    16 de enero de 2013 a las 11:20


  • No está en los documentos (todavía, pero es un wiki, ¡así que puedes agregarlo!), pero está en el código. No hay mejores documentos que el código. AJAX hecho de la manera “codex” usa wp-admin/admin-ajax.php, y si observa la parte superior de ese archivo, verá DOING_AJAX definido.

    – consciente de la web

    16 de enero de 2013 a las 11:42

  • puede verlo referenciado en una declaración if en esta página codex.wordpress.org/Plugin_API/Action_Reference/admin_init

    –Andrew Killen

    23 de marzo de 2015 a las 16:31

WordPress 4.7 ha introducido una manera fácil de verificar las solicitudes de AJAX, por lo que pensé en agregar a esta pregunta anterior.

wp_doing_ajax()

Desde el Referencia del desarrollador:

  • Descripción: determina si la solicitud actual es una solicitud de WordPress Ajax.

  • Retorno: (bool) Verdadero si es una solicitud de WordPress Ajax, falso en caso contrario.

Es esencialmente un contenedor para DOING_AJAX.

Para ver si la solicitud actual es una AJAX solicitud enviada desde una biblioteca js (como jQuery ), podría intentar algo como esto:

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

  • +1 para una versión más corta, y para mí aprendiendo algo hoy.

    – mitad

    15 de enero de 2013 a las 23:13

  • HTTP_X_REQUESTED_WITH no aparece en $_SERVER en WordPress.

    – uve

    9 de abril de 2016 a las 6:48

  • @vee, HTTP_X_REQUESTED_WITH no está configurado por WordPress. Se completa si el autor de la solicitud pasa los encabezados.

    – Spencer Cameron-Morin

    13 de abril de 2016 a las 15:10

1646759231 800 ¿Como detectar si es una solicitud AJAX en WordPress
Ian Brindley

No estoy seguro de si WordPress tiene una función para esto, pero se puede hacer creando una simple tú mismo.

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

Sé que este es un hilo antiguo, pero hay un problema con la respuesta aceptada,

La verificación de la constante DOING_AJAX definida siempre será verdadera, si la solicitud es para el archivo admin-ajax.php. (https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/admin-ajax.php#L16)

A veces, los ganchos admin-ajax.php no se usan para la solicitud AJAX, solo un punto final simple (Paypal IPN, por ejemplo).

La forma correcta es la que han mencionado Ian y Spencer.

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

(habría comentado… pero no representante)

  • Gracias por esto, específicamente esto me permitió no ejecutar funciones cuando Woocommerce estaba haciendo llamadas AJAX para modificar un carrito de personas.

    – Tyler Thomas

    30 de enero de 2018 a las 19:12

1646759232 296 ¿Como detectar si es una solicitud AJAX en WordPress
Adán

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

  • Gracias por esto, específicamente esto me permitió no ejecutar funciones cuando Woocommerce estaba haciendo llamadas AJAX para modificar un carrito de personas.

    – Tyler Thomas

    30 de enero de 2018 a las 19:12

1646759233 747 ¿Como detectar si es una solicitud AJAX en WordPress
Kuliraj

yo personalmente prefiero el wp_doing_ajax()pero aquí hay otro ejemplo que debería hacerlo.

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

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad