warten in javascript
hi!
ich hab einen array mit daten für ajax requests. in einer schleife laufe ich durch den array und führe die requests aus. ich möchte aber nach erfolgreichen requests (HTTP Code 200=OK) 5 sekunden warten, bevor der nächste request kommt. wie mache ich das?
danke!
Antwort schreiben
Antwort 2 von handafo vom 22.09.2020, 20:22 Options
ich glaub ich hab den knoten jetz aus dem hirn. man muss wohl eine funktion "request" sich immer wieder selbst an ihrem ende mit settimeout() aufrufen lassen und dabei die zählervariable als argument immer um eins erhöhen. das ist aber ziemlich primitiv. so wie das ersetzen einer schleife durch das gute alte goto.
gehts vielleicht eleganter?
Antwort 3 von katy vom 22.09.2020, 21:06 Options
Hallo handafo,
so ganz klar ist dein Konzept nicht. Wie laufen deine Requests denn bisher ab?
Alle Array-Elemente durchgehen und jeweils einen Request starten?
Das würde bedeuten, dass alle fast gleichzeitig losgehen, denn mit der Ergebnisverarbeitung hat das ja nichts zu tun ("asynchron").
Du willst also immer warten? Warum eigentlich? Ist dein Server zu träge?
Letztlich kannst du die Verzögerung wirklich nur ans Ende der Request-Funktion setzen (ich weiß nicht ob du das so meinst) und dein Array oder eben nur einen aktuellen Index als Parameter übergeben.
Dein Konzept ist unelegant, weil du versuchst, asynchrone (AJAX) Requests zu synchronisieren. Das passt nun mal nicht.
Genauere Hilfe ist aber nur bei genauerer Kenntnis deines eigentlichen Problems (wozu die 5sek) möglich.
katy
Antwort 4 von handafo vom 22.09.2020, 23:01 Options
meine requests sind nicht asynchron. das warten ist, weil ich von einem fremden server runterlade und keinen ärger will.
Zitat:
Letztlich kannst du die Verzögerung wirklich nur ans Ende der Request-Funktion setzen (ich weiß nicht ob du das so meinst) und dein Array oder eben nur einen aktuellen Index als Parameter übergeben.
ja ich denke wir meinen dasselbe.
Antwort 5 von katy vom 23.09.2020, 06:51 Options
ich fürchte, dann musst du mit der Uneleganz leben, AJAX ist eben völlig anders konzipiert.
Allerdings hindert dich nichts daran aus AJAX
SJAX zu machen. Mit
http.open("GET", "datei.html", false);
wartet das Skript bis die Datei geladen ist (oder eine Fehlermeldung vom Server kommt).
false steht hier für
synchron.
katy
Antwort 6 von handafo vom 23.09.2020, 09:45 Options
wie ich schon sagte, meine requests sind bereits synchron. es handelt sich hier allerdings um eine synchronizität zwischen dem skriptablauf und dem request. das "a" in ajax steht für etwas anderes. nämlich die asynchronizität zwischen dem abruf der webseite durch den user und die durch das skript initiierten requests. also auch synchrone ajaxrequests sind asynchrones ajax.
Zitat:
ich fürchte, dann musst du mit der Uneleganz leben, AJAX ist eben völlig anders konzipiert.
das problem hat gar nichts mit ajax zu tun, sondern mit dem fehlen einer sleepfunktion in javascript. das problem ist älter als ajax.
Antwort 7 von DeluxeStyle vom 23.09.2020, 09:47 Options
ich teste meine Javascript Sachen immmer mit FireFox und der Firebug Erweiterung. Dort kann man Haltepunkte bei den Scripten setzen, was sehr sehr praktisch ist
Antwort 8 von handafo vom 23.09.2020, 09:58 Options
hört sich nicht schlecht an. danke für den tipp.
Antwort 9 von handafo vom 23.09.2020, 10:07 Options
wobei mein skript ist im chrome-bereich. ob das da auch funzt?