Cuando trabajamos con aplicaciones que tienen interfaces web, sin lugar a dudas, la experiencia de usuario mejora enormemente si hacemos uso de tecnologías como AJAX que nos permiten transmisiones y recepciones asíncronas.
No se fuerzan cambios ni refrescos de pantalla y por lo tanto, la experiencia del usuario es más continua y más parecida a cómo sería en un interfaz de escritorio. Sin embargo, este tipo de tecnologías tiene un problema: si no controlamos los eventos del usuario mientras existe una carga de datos, es posible que se generen comportamientos erráticos.
Pongamos un ejemplo. Tenemos un sistema que carga una serie de datos de forma dinámica con AJAX a través de un formulario. Cuando el usuario hace la búsqueda, la carga se realiza y se le muestra. Si la carga tarda “mucho” y no se bloquea de alguna forma la posibilidad de seguir buscando, pueden aparecer resultados incoherentes (de búsquedas anteriores) o directamente fallar el sistema por sobrecarga.
¿Cuál es la solución más popular para este tipo de problemas? Utilizar una pantalla de espera. Vamos a explicar cómo hacerlo con jQuery en muy pocos pasos.
Introducción
La solución que vamos a usar, utilizará un div no opaco de color gris, que ocupará la pantalla al completo cuando se produzca una petición de tipo AJAX. El div incorporará una animación en la parte central.
El div
Deberemos situar un div que por defecto se encuentre escondido, hide, justo al comienzo de nuestro código del body. Contendrá una imagen de carga, que podréis generar fácilmente con alguna aplicación web como AJAXLoad.
El código será el siguiente:
<div id="div_carga"> <img id="cargador" src="./images/ajax-loader.gif"/> </div>
El estilo del div
Para que el div ocupe la pantalla completa y la imagen se quede en medio, deberemos establecer las siguientes reglas CSS:
#div_carga{ position:absolute; top:0; left:0; width:100%; height:100%; background: url(images/gris.png) repeat; display:none; z-index:1; } #cargador{ position:absolute; top:50%; left: 50%; margin-top: -25px; margin-left: -25px; }
El fichero gris.png que aparece, es un fichero con una imagen en PNG de color gris con transparencias.
Finalmente tenemos que introducir el código que se encargue de hacer que en cuanto se produce una petición AJAX el div se muestre y que cuando finalice, se oculte. Podríamos hacerlo para cada operación, pero es mucho más cómodo usar las funciones:
¿Cómo? Como se muestra a continuación.
$('#div_carga') .hide() .ajaxStart(function() { $(this).show(); }) .ajaxStop(function() { $(this).hide(); }) ;
Como siempre, cualquier sugerencia, corrección o comentario será bien recibido.
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
Genial tip Carazo! Anotado para usos futuros.
Saludos
PD: Se te ha colado una r en el nombre de la función AjaxStrop();
@nordri: Me alegro que te guste.
¡Gracias por comentarme el fallo!
Buenisimo, me sirvió para moner mascaras a todas las llamdas ajax, muchas gracias...
Hola
¿y cómo lo mandar llamar desde html?
Tienes que hacerlo dentro de la parte de los .
Hola, en mi aplicación el tamaño de la ventana era variable y le tuve que agregar las siguientes lineas
$('#div_carga')
.hide()
.ajaxStart(function() {
var width;
var height;
width = $('body').css('width')
height = $('body').css('height')
$('#div_carga').css('width',width)
$('#div_carga').css('height',height)
$(this).show();
})
.ajaxStop(function() {
$(this).hide();
})
;
saludos
Gran aporte, gracias :)
Por favor, puedes poner e codigo completo, eso va entre
$.ajax({
});
o como es el asunto
Eso va directamente en la parte de de tu código, aunque te recomendaría hacer lo siguiente para que funcione siempre bien:
jQuery(document).ready(function($){ AQUÍ EL CÓDIGO });
Esto también te serviría en WordPress.
Por cierto, debes tener cargado en tu página jQuery.
En mi caso tuve que agregarle un par de cosillas más, pero está excelente y me ha funcionado de maravilla. Gracias!!