¿La mejor manera de finalizar la solicitud ajax de WordPress y por qué?

Pregunta:

Teniendo en cuenta las solicitudes regulares de WordPress ajax como estas:

add_action( 'wp_ajax_merrychristmas_happynewyear', array( $this, 'merrychristmas_happynewyear' ) );
add_action( 'wp_ajax_nopriv_merrychristmas_happynewyear', array( $this, 'merrychristmas_happynewyear' ) );

¿Será mejor finalizar la función merrychristmas_happynewyear con die() , die(0) , wp_die() o algo más y por qué?

Respuesta:

Usar wp_die() es la mejor de esas opciones.

Como han señalado otros, hay muchas razones para preferir una función específica de WordPress sobre el simple die o la exit :

  • Permite que otros complementos se conecten a las acciones llamadas por wp_die() .
  • Permite utilizar un controlador especial para salir en función del contexto (el comportamiento de wp_die() se adapta en función de si la solicitud es una solicitud Ajax o no).
  • Hace posible probar su código.

El último es más importante, por eso agregué esa nota al Codex . Si desea crear pruebas unitarias / de integración para su código, no podrá probar una función que llame a exit o die directamente. Terminará el script, como se supone que debe hacerlo. La forma en que se configuran las propias pruebas de WordPress para evitar esto (para las devoluciones de llamada de Ajax para las que tiene pruebas), es engancharse a las acciones desencadenadas por wp_die() y lanzar una excepción. Esto permite detectar la excepción dentro de la prueba y analizar la salida de la devolución de llamada (si corresponde).

La única vez que usaría die o exit es si desea omitir cualquier manejo especial de wp_die() y matar la ejecución inmediatamente. Hay algunos lugares donde WordPress hace esto (y otros lugares donde podría usar die directamente solo porque el manejo de wp_die() no es importante, o nadie ha intentado crear pruebas para un fragmento de código todavía, por lo que se pasó por alto). Recuerde que esto también hace que su código sea más difícil de probar, por lo que generalmente solo se usaría en código que no está en un cuerpo de función de todos modos (como lo hace WordPress en admin-ajax.php ). Entonces, si el manejo de wp_die() no se desea específicamente, o si está matando el script en un cierto punto como precaución (como lo hace admin-ajax.php , esperando que generalmente una devolución de llamada Ajax ya haya salido correctamente), entonces podría considerar usar die directamente.

En términos de wp_die() vs wp_die( 0 ) , lo que debe usar depende de lo que esté manejando la respuesta de esa solicitud Ajax en la interfaz. Si espera un cuerpo de respuesta en particular, entonces debe pasar ese mensaje (o entero, en este caso) a wp_die() . Si todo lo que está escuchando es que la respuesta sea exitosa (código de respuesta 200 o lo que sea), entonces no hay necesidad de pasar nada a wp_die() . Sin embargo, wp_die( 0 ) que terminar con wp_die( 0 ) haría que la respuesta no se pudiera distinguir de la respuesta predeterminada admin-ajax.php . Entonces, terminar con 0 no le dice si su devolución de llamada se conectó correctamente y realmente se ejecutó. Un mensaje diferente sería mejor.

Como se señaló en otras respuestas, a menudo encontrará wp_send_json() et al. para ser útil si está enviando una respuesta JSON, que generalmente es una buena idea. Esto también es superior a simplemente llamar a wp_die() con un código, porque puede pasar mucha más información en un objeto JSON, si es necesario. El uso de wp_send_json_success() y wp_send_json_error() también enviará el mensaje de éxito / error en un formato estándar que cualquier función auxiliar JS Ajax proporcionada por WordPress podrá entender (como wp.ajax ).

TL; DR: Probablemente siempre debería usar wp_die() , ya sea en una devolución de llamada Ajax o no. Aún mejor, envíe información con wp_send_json() y amigos.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım