¿Por qué WordPress añade un 0 (cero) a la respuesta Ajax?
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?

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.

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

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.

@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.
