Sven Rautenberg: Ladebalken funktioniert nur mit alert()-Meldung

Beitrag lesen

Moin!

Allerdings bin ich in Sachen Ladebalken nicht wirklich weiter gekommen.
Es findet noch immer keine Aktualisierung statt, obwohl ich die Ladebalkensteuerung mittlerweile mit setInterval() realisiert habe.

Aber nicht so, wie ich es sagte. Du rufst einmalig setInterval auf und hoffst, dass dann regelmäßig der Balken wächst, indem du einfach nur die Fortschrittsvariable änderst. Aber Javascript ist eine Single-Task-Sprache, d.h. wenn irgendwo eine Funktion ausgeführt wird, wird keinerlei andere Funktion parallel ausgeführt.

Das bedeutet:

Hier mein letzter Code, der den XML-Fragenkatalog lädt:

Ein frommer Wunsch, der nur ausgeführt wird, wenn absolut nichts zu tun ist:

laden = window.setInterval("progress()", 1000);

Das hier soll getan werden (ist im Prinzip nicht falsch, wird nur nie ausgeführt).

function progress()
{
document.getElementById("rahmenbalken").firstChild.nodeValue = fortschritt_aktuell +" % des Fragenkatalogs geladen...";
document.getElementById("balken").style.width = fortschritt_aktuell + "%";
}

Und das hier wird, ohne dass eine Pause gemacht wird, indem die Funktion echt endet, ausgeführt, ohne Zeit für den Balken zu lassen:

function initialisierung() // strXML
{
liste_fuellen("fragetitel", "fragetitel", 1, "");
fortschritt_aktuell=10;
liste_fuellen("fragetyp", "fragetyp", 1, "");
fortschritt_aktuell=20;
liste_fuellen("punkte", "punkte", 1, "");
fortschritt_aktuell=30;
liste_fuellen("hinweis", "hinweis", 1, "");
fortschritt_aktuell=40;
liste_fuellen("erklaerung", "erklaerung", 1, "");
fortschritt_aktuell=50;
liste_fuellen("fragetext", "fragetext", 1, "");
fortschritt_aktuell=60;
liste_fuellen("antwort", "antworttext", 1, "");
fortschritt_aktuell=70;
liste_fuellen("antwort", "zufrage", 2, "zuFrage");
fortschritt_aktuell=80;

...

Korrekte Vorgehensweise wäre:
1. Funktionsaufruf.
2. Funktion erledigt eine kleine Teilaufgabe.
3. Funktion aktualisiert den Fortschrittsbalken.
4. Funktion prüft, ob noch weitere Aufgaben zu erledigen sind. Wenn ja:
   4a. Funktion setzt mit setTimeout ihren eigenen Wiederaufruf auf die Liste.
5. Funktion endet.

- Sven Rautenberg

--
"Love your nation - respect the others."