Pregunta

¿Hay alguna forma de escuchar una función de javascript para salir? ¿Un disparador que podría configurarse cuando una función se ha completado?

Estoy intentando usar una técnica de ofuscación de la interfaz de usuario (BlockUI) mientras un objeto AJAX está recuperando datos de la base de datos, pero la función no se ejecuta necesariamente, incluso si la pones al final de la llamada a la función.

Ejemplo:

function doStuff() {
  blockUI();
  ajaxCall();
  unblockUI();
};

¿Hay alguna manera de que doStuff escuche la finalización de ajaxCall, antes de disparar el unlockiI? Tal como está, procesa la función de forma lineal, llamando a cada objeto en orden, luego se genera un hilo separado para completar cada uno. Entonces, aunque mi llamada AJAX puede tardar entre 10 y 15 segundos en completarse, solo estoy bloqueando al usuario por solo una fracción de segundo, debido a la ejecución lineal de la función.

Hay formas menos elegantes de solucionar esto ... poniendo un bucle para que finalice solo cuando el valor de retorno establecido por la función AJAX se establece en verdadero, o algo así. Pero eso parece innecesariamente complicado e ineficiente.

¿Fue útil?

Solución

Sin embargo, está logrando sus rutinas Ajax, lo que necesita es una " devolución de llamada " función que se ejecutará una vez que esté completa:

function ajaxCall(callback){
    //do ajax stuff...
    callback();
}

Entonces:

function doStuff(){
    blockUI();
    ajaxCall(unblockUI);
}

Otros consejos

Su llamada AJAX debe especificar una función de devolución de llamada. Puede llamar a unblockUI desde la devolución de llamada.

SAJAX es una biblioteca simple de AJAX que tiene más ayuda sobre cómo hacer llamadas de AJAX.

También hay otra publicación que describe lo que estás buscando.

Puedes hacer un xhr síncrono. Esto causaría el bloqueo completo de la interfaz de usuario durante la duración de la llamada (sin importar el tiempo que dure).

Necesita rediseñar el flujo de su programa para que sea compatible con el flujo asíncrono, como especificar una función de devolución de llamada para que se llame después de que se procese la respuesta. Compruebe cómo Prototype o JQuery o ... logra esto.

La respuesta es simple, tienes que llamar a unblockUI () cuando tu solicitud ajax devuelve el resultado, utilizando jQuery puedes hacerlo de esta manera:

function doStuff(){

    blockUI();

    jQuery.ajax({
        url: "example.com",
        type: "POST",           //you can use GET or POST
        success: function(){

            unblockUI();
        }
    });
}

Me parece que desea que el usuario espere mientras se obtiene información de la base de datos. Lo que hago cuando hago una llamada Ajax para obtener información de la base de datos es mostrar un gif animado que dice "obtenerlo ..." - parpadea continuamente hasta que la información se recupera y se muestra en la página web. Cuando se muestra la información, el gif animado se apaga / se oculta y el enfoque se mueve a la nueva información que se muestra. El gif animado le permite al usuario saber que algo está sucediendo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top