Ajax Timeout
Brill
- javascript
Ich habe ein Problem mit eine Ajax Anwendung.
ich habe meine Synchronen Ajax anfrage in einen Try/Catch Block gepackt.
wenn ich die Netzwerk Verbindung von meinem Rechner zum Server (alles Local) dann wird wie gewünscht im catch bock meine Fehlermeldung ausgegeben.
Starte ich dagegen den Rechner neu dann freit so zusagen mein Browser ein, bis der Server wieder da ist, erst dann kommt manchmal die Fehlermeldung.
zu beachten ist das mit setInterval jede Sekunde Daten vom Server abgefragt werden.
Ich habe auch schon versucht mit einem weiteren setIntervall das prüft ob Daten ankamen den ersten Intervall zu Stoppen, aber leider tut das auch nur wenn ich das Netzkabel ziehe und nicht wenn der Server einfach nur off ist.
Über Hinweise wäre ich sehr dankbar.
Brill
ich habe meine synchronen Ajax-Anfragen in einen Try/Catch-Block gepackt.
Starte ich dagegen den Rechner neu, dann friert so zusagen mein Browser ein, bis der Server wieder da ist, erst dann kommt manchmal die Fehlermeldung.
Dein Problem ist ein grundlegendes der synchronen Anfragen, diese blockieren nunmal alles nachfolgende.
Zu beachten ist, dass mit setInterval jede Sekunde Daten vom Server abgefragt werden.
Ich kenne Deine Anwendung nicht, aber wo Synchron-Blockaden Probleme bereiten (und wo tun sie das nicht) und obendrein auch noch in einer Endlosschleife Daueranfragen gemacht werden (sekündliches Hämmern an der Tür ist bäh), bist Du meiner Meinung nach gut damit beraten, statt der synchronen asynchrone Anfragen zu nutzen. Du entledigst Dich damit des Blockadeproblems und entlastest obendrein Browser und Server, das macht den kleinen Umstellungsaufwand allemal wett.
Geht es darum, sich kontinuierlich ändernde Daten anzuzeigen, setze die Anfragen zeitlich gesteuert ab, und zwar nacheinander, nicht parallel. Im Moment jagst Du, egal was passiert, jede Sekunde eine Anfrage raus. Bei einer Verbindungsstörung hast Du nach einer halben Minute dreißig Anfragen in der Luft hängen, das ist nicht nett.
So oder so, benutze setTimeout(), um erst _nach_ Beendigung einer Anfrage den Wecker für die nächste zu starten. Bei Normalbetrieb hältst Du damit genauso gut die derzeitigen Intervalle ein und bei einer Störung kann sich nichts anhäufen.
Mit dem Austausch von setInterval() gegen setTimeout() und der Nutzung asynchroner Anfragen sollte Deine Anwendung flüssiger laufen. Es bestünde sogar noch die Möglichkeit, die Anzeigeschicht von der Netzwerkschicht durch Zwischenschalten einer Variablen vollständig abzukoppeln, falls absolut regelmäßiges Erneuern der Anzeige unabdingbar ist.