Domanda

C'è un modo per ascoltare l'uscita di una funzione javascript? Un trigger che potrebbe essere impostato al completamento di una funzione?

Sto tentando di utilizzare una tecnica di offuscamento dell'interfaccia utente (BlockUI) mentre un oggetto AJAX sta recuperando dati dal DB, ma la funzione non viene necessariamente eseguita per ultima, anche se la metti alla fine della chiamata di funzione.

Esempio:

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

Esiste un modo per doStuff di ascoltare il completamento di ajaxCall, prima di lanciare l'interfaccia di sblocco? Così com'è, elabora la funzione in modo lineare, chiamando ciascun oggetto in ordine, quindi viene generato un thread separato per completare ognuno. Quindi, sebbene il completamento della mia chiamata AJAX possa richiedere 10-15 secondi, sto bloccando l'utente solo per una frazione di secondo, a causa dell'esecuzione lineare della funzione.

Ci sono modi meno eleganti attorno a questo ... mettere un ciclo alla fine solo quando un valore di ritorno impostato dalla funzione AJAX è impostato su vero, o qualcosa del genere. Ma questo sembra inutilmente complicato e inefficiente.

È stato utile?

Soluzione

Comunque stai completando le tue routine Ajax, quello che ti serve è un " callback " funzione che verrà eseguita una volta completata:

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

Quindi:

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

Altri suggerimenti

La tua chiamata AJAX dovrebbe specificare una funzione di richiamata. È possibile chiamare l'interfaccia utente di sblocco dall'interno del callback.

SAJAX è una semplice libreria AJAX che ha più aiuto su come effettuare chiamate AJAX.

C'è anche un altro post che descrive ciò che stai cercando.

Puoi fare un xhr sincrono. Ciò causerebbe l'intero blocco dell'interfaccia utente per la durata della chiamata (non importa quanto tempo potrebbe richiedere).

È necessario riprogettare il flusso del programma in modo che sia compatibile con il flusso asincrono, come specificare una funzione di richiamata da chiamare dopo l'elaborazione della risposta. Scopri come Prototype o JQuery o ... compiono questo.

La risposta è semplice, devi chiamare unblockUI () quando la tua richiesta Ajax restituisce il risultato, usando jQuery puoi farlo in questo modo:

function doStuff(){

    blockUI();

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

            unblockUI();
        }
    });
}

Mi sembra che tu voglia che l'utente attenda mentre le informazioni vengono recuperate dal db. Quello che faccio quando faccio una chiamata Ajax per alcune informazioni dal database è visualizzare una gif animata che dice "ottenere ..." - lampeggia continuamente fino a quando le informazioni non vengono recuperate e visualizzate nella pagina Web. Quando vengono visualizzate le informazioni, la gif animata viene disattivata / nascosta e lo stato attivo viene spostato sulle nuove informazioni visualizzate. La gif animata fa sapere all'utente che sta succedendo qualcosa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top