¿Por qué WordPress añade un 0 (cero) a la respuesta Ajax?

4 oct 2013, 14:58:44
Vistas: 18K
Votos: 22

A menos que termine mi función de procesamiento Ajax con exit() o die(), la función Ajax recibe la salida correcta pero seguida de un 0.

¿Alguna idea de por qué ocurre esto?

¿Está diseñado para funcionar así o hay alguna forma de solucionarlo?

add_action('wp_ajax_get_homepage', 'get_homepage');
add_action('wp_ajax_nopriv_get_homepage', 'get_homepage');

function get_homepage(){
    echo "get_homepage ->";
    exit();
}

He leído en AJAX en Plugins, pero ¿por qué es necesario esto?

2
Comentarios

¿Ocurre esto (la adición del 0) incluso si estás desconectado de WordPress?

murdaugh murdaugh
4 oct 2013 15:06:31

Sí, incluso si no estoy conectado a WordPress.

Radek Radek
4 oct 2013 15:14:56
Todas las respuestas a la pregunta 1
4
40

La respuesta predeterminada de admin-ajax.php es:

die( '0' );

...al agregar tu propio wp_die(), exit() o die() después de devolver el contenido deseado, evitas que también se devuelva la respuesta predeterminada de admin-ajax.php.

También generalmente significa que tu llamada AJAX ha tenido éxito.

En última instancia, para responder a tu pregunta, está diseñado para funcionar de esta manera. Lo que estás haciendo al salir después de devolver tu contenido es lo correcto.

4 oct 2013 15:43:29
Comentarios

Gracias por la explicación. ¿Entonces uso die() o verifico dentro del ajax si es 0 para saber que todo estuvo bien?

Radek Radek
5 oct 2013 04:12:49

Usa die() o exit() después de hacer echo de tu contenido/datos. En la función callback de success/complete de tu método ajax, puedes manipular los datos y usarlos para poblar el DOM. También puedes hacer comprobaciones adicionales de errores para validar la integridad de los datos. Igualmente puedes hacer comprobación de errores en tu función callback de PHP antes de la salida. Esencialmente, salir después de retornar tu respuesta asegurará que no recibas también el 0 junto con ella. Por cierto, solo porque recibas una respuesta 0 no significa que tu llamada ajax fue 100% exitosa. Sin embargo es fácil saberlo cuando inspeccionas tu salida.

Adam Adam
5 oct 2013 04:26:35

Deberías usar wp_die() añadido en la versión 2.0.4

thrillcode thrillcode
28 abr 2018 07:31:17

@thrillcode a menos que necesites exponer el proceso de wp_die a otros plugins o código del tema que puedan engancharse a dicho proceso, entonces, usar die o exit está bien. Si tienes la intención de liberar tu código como código abierto o de otra manera, donde tu código necesita funcionar bien con otros, entonces wp_die sería más preferible, de acuerdo.

Adam Adam
29 abr 2018 11:12:25