¿Qué es una solicitud AJAX oculta?
He notado un aumento en el uso de solicitudes ocultas de AJAX diseñadas para hacer que la acción de un usuario parezca suceder de inmediato. Me referiré a este tipo de solicitud AJAX como sin bloqueo. Es una solicitud AJAX hecha sin que el usuario sepa que está sucediendo, se realiza en segundo plano y su operación es silenciosa ( no hay detalles para indicar una finalización exitosa de la llamada AJAX ). El objetivo es hacer que la operación parezca que ha sucedido inmediatamente cuando realmente no ha terminado.
Aquí hay ejemplos de solicitudes AJAX sin bloqueo;
- El usuario hace clic en eliminar en una colección de correos electrónicos. Los elementos desaparecen inmediatamente de su bandeja de entrada y pueden continuar con otras operaciones. Mientras tanto, una solicitud AJAX está procesando la eliminación de los elementos en segundo plano.
- El usuario completa un formulario para nuevos registros. Clics guardar. El nuevo elemento aparece en la lista de inmediato. El usuario puede continuar agregando nuevos registros.
Para aclarar, aquí hay ejemplos de bloqueo de solicitud AJAX;
- El usuario hace clic en eliminar en una colección de correos electrónicos. Aparece un cursor de reloj de arena. Se realiza la solicitud AJAX y, cuando responde, el cursor del reloj de arena se apaga. El usuario tiene que esperar un segundo para que se complete la operación.
- El usuario completa un formulario para nuevos registros. Clics guardar. El formulario se vuelve gris con una animación de cargador AJAX. Se muestra un mensaje "Se guardaron sus datos", y el nuevo registro aparece en la lista.
La diferencia entre los dos escenarios anteriores es que una configuración de AJAX sin bloqueo no proporciona retroalimentación de un rendimiento operativo, y una configuración de AJAX de bloqueo sí.
El riesgo de solicitudes ocultas de AJAX
El mayor riesgo de este estilo de solicitud AJAX es que la aplicación web podría estar en un estado completamente diferente cuando falla la solicitud AJAX.
Por ejemplo, un ejemplo sin bloqueo;
- El usuario selecciona un montón de correos electrónicos. Hace clic en el botón Eliminar. La operación parece ocurrir de inmediato (los elementos simplemente desaparecen de la lista). Luego, el usuario hace clic en el botón de redacción y comienza a escribir un nuevo correo electrónico. Es en este momento que el código JavaScript descubre que la solicitud AJAX falló. El script podría mostrar un mensaje de error, pero realmente no tiene sentido en este momento.
Alternativamente, un ejemplo de bloqueo;
- El usuario selecciona un montón de correos electrónicos. Hace clic en el botón Eliminar. Ve un reloj de arena, pero la operación falla. Reciben un mensaje de error que dice "error. Bla, bla, bla". Vuelven a la lista de correos electrónicos y todavía tienen seleccionados los correos que querían eliminar. Podrían intentar eliminarlos nuevamente.
También existen otros riesgos técnicos para realizar solicitudes AJAX sin bloqueo. El usuario puede cerrar el navegador, puede navegar a otro sitio web y puede navegar a otra ubicación en la web actual que hace que el contexto de cualquier respuesta de error no tenga sentido.
Entonces, ¿por qué se está volviendo tan popular?
Facebook, Google, Microsoft, etc. etc. Todos estos dominios grandes utilizan cada vez más solicitudes AJAX sin bloqueo para hacer que las operaciones parezcan que se realizan al instante. También he visto un aumento en los editores de formularios que no tienen botón de guardar o enviar . Tan pronto como salga de un campo o presione enter. El valor se guarda. No hay ningún mensaje de perfil actualizado o paso de guardado.
Las solicitudes de AJAX no son una certeza, y no deben tratarse como exitosas hasta que se hayan completado, pero muchas de las principales aplicaciones web están funcionando así.
¿Estos sitios web que usan llamadas AJAX sin bloqueo para simular aplicaciones receptivas corren un riesgo innecesario a costa de aparecer rápidamente?
¿Es este un patrón de diseño que todos deberíamos seguir para seguir siendo competitivos?