Diese Frage beschäftigt sich mit Concurrency Probleme, Anregungen, wie ein arbeitsreiches Symbol angezeigt werden, diese Frage sehen: Javascript - Laden / Besetztanzeige oder transparent div über Seite auf Ereignis klicken
Wenn ein Benutzer eine AJAX-Anforderung auf einer Seite initiiert ist es sinnvoll, eine Art von „Arbeiten“ oder beschäftigt Symbol oder Fortschrittsanzeige zu zeigen. Wenn es nur eine lang andauernde Prozess kann dies in einer relativ einfachen Art und Weise behandelt werden:
function do_action() {
show_busy_icon();
long_running_asynchronous_process(function() {
// Callback function run when process finishes
hide_busy_icon();
});
}
Wenn jedoch mehrere asynchrone Prozesse auf der Seite ausgeführt werden, unter Verwendung von Ein / Aus-Methoden nicht funktionieren würde. Der erste Prozess schaltet zu beenden das Symbol, obwohl es laufen weitere Prozesse.
Also, wie gehen Sie einen Indikatoren anzeigt, auf einer Web - Seite, dass auf ist , wenn es ein oder mehr Prozesse ausgeführt wird , und ausgeschaltet , wenn es läuft keine Prozesse?
Ich stelle mir vor , es wäre möglich , läuft eine Zählung der Anzahl der Prozesse zu erhalten. hide_busy_icon()
nur versteckt das Symbol , wenn die Prozessanzahl ist 0. Die irgendwie anfällig für Fehler scheint. Vielleicht gibt es eine bessere / einfachere Art und Weise , die ich nicht sehen.
Vielen Dank für Ihre Ideen und Anregungen!
Edit: Nach dem mit der Lösung in der markierten Antwort für eine Weile arbeiten, ich bin froh, dass es sehr gut zu sagen, funktioniert. Das einzige Problem, das ich habe laufen in sind Fälle, in denen meine eigene Skripte Funktionen von Skripten aufrufen ich nicht kontrollieren. Es sei denn, diese Funktionen Rückrufe ermöglichen geliefert werden, es gibt keine Möglichkeit, den Prozess Zählung zu aktualisieren, wenn sie beginnen und enden.
Ein Beispiel, wo dies kann auftritt, ist eine Reihe von Markierungen auf eine Google-Karte hinzufügen. Sobald mein Skript ruft funktioniert die Google Maps das Besetzt-Symbol verschwindet, während die Markierungen noch geladen werden.
Ich bin nicht sicher, eine gute Möglichkeit, dies zu umgehen.