¿Por qué WordPress agrega 0 (cero) a una respuesta de Ajax?

16

A menos que finalice la función de procesamiento de Ajax con exit()o die(), la función Ajax recibe la salida deseada y correcta, pero sigue 0.

¿Alguna idea de por qué está sucediendo eso?

¿Está destinado a ser así o se podría arreglar?

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?

Radek
fuente
¿Sucede (la adición de 0) incluso si ha cerrado la sesión de WordPress?
Murdaugh
Sí, incluso si no estoy conectado a WordPress.
Radek

Respuestas:

31

La respuesta predeterminada de admin-ajax.phpes,

die( '0' );

... añadiendo su propio wp_die()o de exit()o die()después de regresar a sus evita que el contenido deseados la respuesta por defecto de admin-ajax.phpser devuelto también.

También generalmente significa que su llamada ajax ha sido exitosa.

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

Adán
fuente
Gracias por la explicación. Entonces, ¿uso die () o verifico dentro de ajax para 0 para saber que todo estaba bien?
Radek
2
Use die()o exit()después de hacer eco de su contenido / datos. En la success/completefunción de devolución de llamada de su método ajax, puede manipular los datos y usarlos para llenar el DOM. También puede hacer cualquier verificación de error adicional para validar la integridad de los datos. También puede verificar errores en su función de devolución de llamada PHP antes de la salida. Esencialmente salir después de devolver su respuesta asegurará que no se lleve 0bien. Por cierto, solo porque reciba una 0respuesta no significa que su llamada ajax haya sido 100% exitosa. Sin embargo, es fácil saber cuándo inspecciona su salida.
Adam
1
Debería usar wp_die()agregado en 2.0.4
código de emoción
@thrillcode a menos que necesite exponer el proceso wp_diea otros complementos o códigos de temas que puedan engancharse a dicho proceso, luego, usar dieo exitestá bien. Si tiene la intención de liberar su código como OSS o de otro modo, donde su código necesita jugar bien con los demás, entonces wp_diesería más preferible, de acuerdo.
Adam