Timer/Ajax/Layer-Problem

Anna Bolika

Erfahrenes Mitglied
Ich habe ein Problem, mit dem ich nicht weiterkomme.

Ich habe ein kleines eigenes Framework für ein eigenes CMS, das Daten über Ajax nachläd. Dies geschieht über eine eigene Syntax, die hier nicht wichig ist, weil sie fehlerfrei funktioniert. Dies habe ich getestet.

Nun habe ich eine "Warte-Funktion" geschrieben, deren Inhalt so aussieht. Auch diese Funktion funktioniert.

Code:
var iSeconds;
	var iMilliSecondsToWait = 1000 * iSeconds; 
		
	var oStartTime = new Date(); 
	var iStartTime = oStartTime.getTime(); 
	
	var oNowTime; 
	var iNowTime;

	do
	{ 
		oNowTime = new Date(); 
		iNowTime = oNowTime.getTime();
	} 
	while ((iNowTime - iStartTime) < iMilliSecondsToWait);


Nun wird eine bestimmte Befehlsfolge über Ajax nachgeladen, die in Pseudo-Code lautet:

- Öffne einen Layer
- Schreibe einen Text hinein.
- Warte 3 Sekunden
- Schließe den Layer wieder.

Alles wird richtig erkannt - das ist bereits getestet. Probleme bereitet die Warte-Funktion (erst mal nur auf Chrome getestet).

Offenbar wird der Layer geöffnet, der Text hineingeschrieben. ABER scheinbar geschieht das alles erst NACHDEM die Warte-Funktion abgelaufen ist. Daraufhin wird der Layer auch sofort wieder geschlossen, so dass man den Eindruck hat, dass nichts passiert.

Nimmt man die Warte-Funktion heraus und ersetzt sie durch ein alert(), klappt alles, wie gewollt. Für sich allein funktioniert die Wartefunktion aber.

Mal eine Frage an die Profis, ob folgendes sein könnte:

Kann es sein, dass die Warte-Funktion das System so sehr stilllegt, dass der gerade geöffnete Layer noch nicht zur Anzeige an den Bildschirm weitergegeben wird. So dass also technisch gesehen der Layer vor dem wait angelegt wird, aber praktisch das System erst wieder genug Luft hat, ihn auch anzuzeigen, wenn die Wartezeit abgelaufen ist.

Wenn mich jemand verstehen kann, bin ich über Tipps dankbar. :-)
 
Und ich verstehe genau, warum du das nicht verstehst :-)

Ich habe jetzt setTimeout verwendet und es funktioniert. Grund für die andere Vorgehensweise war, dass die oben beschriebene Lösung in meinem Fall flexibler gewesen wäre. Ist aber jetzt egal.
 
Mh, wenn du mir genauer erklärst, was an deiner Idee flexibler ist, versuche ich dafür eine Lösung zu finden (wenn auch nur zum Spielen).
 
Ich fürchte, dass meine Antwort nur zu weiteren Fragen führen wird. Darum schreibe ich eine kurze Erklärung, aber lass uns die Diskussion darüber hier beenden.

Bei mir stehen in einem HTML-Dokument, das per Ajax übertragen wird, zusätzliche Befehle für meine Ajax-Klasse. Über diese Befehle können Teile eines Dokuments bestimmten Elementen zugeordnet werden, Elemente ein-, ausgeblendet oder auch verändert werden.

Mir kam nun die Idee, unwichtige Bestätigungen, die man sowieso überliest, einfach für ein oder zwei Sekunden einzublenden und dann automatisch wieder auszublenden. Dazu habe ich einen Baustein "warten" eingebaut. Da diese Funktion das oben beschriebene Verhalten zeigt, habe ich es nun geändert und dem Befehl "Schließe Layer" einfach einen optionalen Parameter für eine über setTimeout() gesteuerte Pause hinzugefügt.

Dies funktioniert nun.

An meiner oben beschriebenen Idee war tatsächlich flexibler, dass ich die Warte-Funktion auch für andere Dinge hätte verwenden können. Bin aber so ehrlich, dass mir kaum weitere Einsatzmöglichkeiten einfallen. Vielleicht ein Aufblinken bei einem Fehler. Da das aber wirklich nicht wichtig ist und sich auch ohne große Entwicklungsarbeit mit setTimeout() regeln lässt, vefolge ich das nicht weiter.

Du kannst dich also entspannt anderen Dingen zuwenden. Mein Problem ist gelöst. Verstehen tue ich das oben beschriebene Verhalten allerdings nicht :-)
 

Neue Beiträge

Zurück