Lo que intento hacer es agregar una imagen de carga a un div (para que el usuario sepa que algo se está cargando) y luego invoco una función jquery ajax, que está configurada como "async: false". Aquí está mi código:Detener el bloqueo del navegador durante (sincrónico) Ajax?
$jQuery("#playersListDiv").html(loadingImage);
$jQuery.ajax({
type: "POST", /* this goesn't work with GET */
url: urlValue, /*ex: "NBAgetGamesList.php" */
data: parameters, /*ex: "param1=hello" */
cache: false,
async: false,
success: function(data){
}
});
El problema es que las cerraduras del navegador y no añade la imagen de carga hasta después de la llamada AJAX se hace que es inútil, por supuesto. Firefox es el único navegador que realmente agrega la imagen de carga. IE, Chrome y Safari NO anexen la imagen de carga.
Sé que el bloqueo del navegador ocurre porque async está configurado como falso, pero esta es mi única opción porque tengo que esperar a que se complete esta solicitud antes de continuar porque necesito los datos que se devuelven.
¿Hay alguna forma de evitar esto? Si coloco una alerta después de anexar la imagen de carga que funciona, pero no quiero que aparezca una alerta cada vez.
Sincrónico, por definición, es "bloqueo". Cómo afectará a los navegadores varía pero generalmente bloquea las actualizaciones e interacciones DOM. Haz que sea asincrónico para "arreglar" el problema. –
¿Por qué no simplemente hacer que sea asincrónico y poner el código para ejecutar después de esto en una función separada. Entonces llama a la función en el código de retorno? – Bob
"porque necesito los datos que se devuelven". Para eso son las devoluciones de llamada. Tu código no tiene que ser lineal. – epascarello