Mostrando Errores PHP desde admin-ajax.php

26 mar 2018, 13:19:55
Vistas: 23.2K
Votos: 7

Tenemos algunos endpoints personalizados configurados que realizan varias tareas, a los que accedemos a través de /wp/wp-admin/admin-ajax.php?action=some_action

Sin embargo, cuando hay un error durante el desarrollo, como errores de sintaxis, lógicos, fatales, etc., simplemente obtenemos "500 Internal Server Error"

En todas las demás páginas del sitio cuando hay un error, nos muestra el error PHP.

Tenemos que abrir nuestro archivo de registro PHP para ver el error.

¿Hay algo en WordPress que desactive la visualización de errores en estas URLs? y si es así, ¿cómo podemos evitar esto para permitir mostrar los errores en el navegador?

5
Comentarios

Si observas la respuesta en la pestaña de red de las herramientas de desarrollo del navegador, verás el error.

Jacob Peattie Jacob Peattie
26 mar 2018 13:46:48

Ese es todo el problema: solo obtenemos una respuesta de "error interno del servidor 500", sin importar cómo lleguemos allí, incluso si cargas la URL directamente en tu navegador.

owenmelbz owenmelbz
26 mar 2018 15:09:35

@bueltge Lo siento, lo he leído, pero no entiendo qué es relevante. No veo en ningún lado que estén discutiendo por qué los mensajes de error no se muestran.

owenmelbz owenmelbz
26 mar 2018 17:21:26

Los errores de las solicitudes ajax nunca se muestran directamente en tu navegador. Si el informe de errores está activado, puedes ver los mensajes de error en la consola de red. El enlace de Bueltge ayuda a depurar de esa manera.

Luckyfella Luckyfella
15 dic 2018 01:50:03
Todas las respuestas a la pregunta 3
5

WordPress por defecto oculta los errores para las llamadas de solicitud ajax. Esto puede confirmarse en el archivo fuente wp-includes/load.php#L352, aquí:

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
    @ini_set( 'display_errors', 0 );
}

Observa que la función wp_doing_ajax() se está utilizando en la declaración condicional, por lo que display_errors está siendo configurado.

Para solucionar esto, necesitas activar manualmente el reporte de errores al inicio de tu llamada de función ajax, como sugiere @Friss.

4 jul 2018 16:46:31
Comentarios

¡¡¡MUCHAS GRACIAS!!! Sé que obviamente nunca querrás hackear el núcleo, pero solo en un entorno local y con fines de solución de problemas, cuando el ajax es llamado por un plugin con el que no quieres meterte o no tienes tiempo para averiguar - comentar temporalmente la línea mencionada anteriormente en /wp-includes/load.php permitirá la salida de mensajes de error más específicos y te permitirá rastrear de dónde proviene el problema.

squarecandy squarecandy
25 sept 2019 22:58:07

Hay un filtro en la parte superior de load.php que lo omite: add_filter( 'enable_wp_debug_mode_checks', '__return_false' );

CragMonkey CragMonkey
25 abr 2020 21:48:13

@Cragmonkey Por favor explica cómo se podría usar ese hook en su llamada ajax.

Rahil Wazir Rahil Wazir
10 may 2020 04:58:56

@Rahil Wazir ... Deberías crear temporalmente ese hook en otra parte de tu plugin mientras depuras.

CragMonkey CragMonkey
12 may 2020 01:36:32

Para wp v6.5 es la línea 617

Fabrice Fabiyi Fabrice Fabiyi
5 feb 2025 11:57:06
2

Puedes intentar agregar estas dos líneas al principio de tu archivo de script

error_reporting(E_ALL); 
ini_set("display_errors", 1);

Esto le indica a PHP que reporte todo tipo de errores y anula su configuración predeterminada para mostrarlos.

27 mar 2018 00:38:14
Comentarios

Hola, esto sí activa el reporte de errores - sin embargo, estamos intentando específicamente averiguar POR QUÉ se desactiva para el admin-ajax.php ya que si lo configuramos al final del wp-config por ejemplo, se sobrescribe en algún lugar para las llamadas ajax

owenmelbz owenmelbz
27 mar 2018 11:47:21

funcionó, gracias amigo

Sharifur Robin Sharifur Robin
2 abr 2024 20:29:01
2
-1

Puedes probar con WP_Ajax_Response

$response = array(
   'what'=>'stuff',
   'action'=>'delete_something',
   'id'=>new WP_Error('oops','Tuve un accidente.'),
   'data'=>'¡Ups, hubo un problema!'
);
$xmlResponse = new WP_Ajax_Response($response);
$xmlResponse->send();

Lee más https://codex.wordpress.org/Function_Reference/WP_Ajax_Response

26 mar 2018 13:29:41
Comentarios

Lo sentimos, pero esto no es lo que estamos pidiendo: nuestro problema es que los errores de PHP no se muestran, cuando necesitamos que lo hagan

owenmelbz owenmelbz
26 mar 2018 15:10:31

¿qué pasa si hay errores de SQL o cualquier otro tipo?

amilaishere amilaishere
3 feb 2021 13:05:39