¿Hay alguna forma de detectar si la operación actual del servidor es actualmente una solicitud AJAX en WordPress?
Por ejemplo:
is_ajax()
Racura
¿Hay alguna forma de detectar si la operación actual del servidor es actualmente una solicitud AJAX en WordPress?
Por ejemplo:
is_ajax()
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
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
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
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
}
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