Frage

Gibt es eine Möglichkeit zu hören für eine JavaScript-Funktion zu beenden? Ein Trigger, der so eingerichtet werden könnte, wenn eine Funktion beendet hat?

Ich bin versucht, eine Benutzeroberfläche Verschleierungstechnik (BlockUI) zu verwenden, während ein AJAX-Objekt Daten aus der DB abrufen, aber die Funktion auszuführen, muss nicht unbedingt zuletzt, auch wenn Sie es am Ende des Funktionsaufrufes setzen.

Beispiel:

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

Gibt es eine Möglichkeit für doStuff zu hören für ajaxCall, abgeschlossen ist, bevor die unBlockUI Brennen? Wie es ist, es die Funktion linear verarbeitet, wobei jedes Objekt, um ruft dann ein separater Thread hervorgebracht jeden zu vervollständigen. Also, wenn mein AJAX-Aufruf 10-15 Sekunden dauern könnte zu vervollständigen, ich bin nur den Benutzer nur für einen Bruchteil einer Sekunde, aufgrund der linearen Ausführung der Funktion blockiert wird.

Es gibt weniger elegante Möglichkeiten, dies um ... eine Schleife setzen nur zu beenden, wenn ein Rückgabewert durch die AJAX-Funktion auf true gesetzt ist, oder etwas in der Art. Aber das scheint unnötig kompliziert und ineffizient.

War es hilfreich?

Lösung

Jedoch Sie erreichen Ihre Ajax-Routinen, was Sie brauchen, ist ein „Rückruf“ -Funktion ist, die ausgeführt wird, sobald es abgeschlossen ist:

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

Dann:

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

Andere Tipps

Sie sollte AJAX-Aufruf eine Callback-Funktion angeben. Sie können die unblockUI innerhalb der Callback aufrufen.

Sajax ist eine einfache AJAX-Bibliothek, die mehr Hilfe hat, wie AJAX Anrufe zu tun.

Es gibt auch eine andere Stelle das beschreibt, was Sie suchen.

Sie können eine synchrone xhr tun. Dies würde den gesamten UI-Block für die Dauer des Anrufs verursacht (egal wie lange es könnte dauern).

Sie benötigen eine Programmablauf neu zu gestalten mit Asynchron-Flow kompatibel zu sein, wie eine Rückruffunktion Angabe aufgerufen werden, nachdem die Antwort verarbeitet wird. Prüfen Sie, wie Prototype oder JQuery oder ... dies leistet.

Die Antwort ist einfach, Sie haben unblockUI (), wenn Ihre Ajax-Anforderung gibt das Ergebnis zu nennen, mit jQuery Sie es wie folgt tun:

function doStuff(){

    blockUI();

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

            unblockUI();
        }
    });
}

Es klingt für mich, dass Sie den Benutzer warten sollen, während Informationen abgerufen aus dem db sind. Was ich tun, wenn ich einen Ajax-Aufruf für ein paar Informationen aus der Datenbank zu machen ist ein animiertes GIF angezeigt werden, die besagt, „es bekommen ...“ - es ständig blinkt, bis die Informationen abgerufen und auf der Webseite angezeigt. Wenn die Informationen angezeigt wird, wird das animierte gif ausgeschaltet / versteckt und der Fokus wird auf die neue Info bewegt angezeigt wird. Die animierte GIF lässt der Benutzer wissen, dass etwas passiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top