Javascript Request dedektieren
Umlauf
- javascript
Hallo,
ich bin auf der Suche nach einer Möglichkeit, wie ich erkennen kann, dass noch AJAX- Abfragen zwischen Client und Server stattfinden.
Mein Web- Anwendungsaufbau schaut so aus, dass ich nach einem Buttonklick vom Client zyklisch Anfragen an den Server sende und der Server mir dann auf die Anfrage etwas zurücksendet.
Nach jeder Anfrage möchte ich so eine Art timer laufen lassen, der mir die Zeit zwischen REQUEST und RESPONSE misst, wenn diese Zeit zu lange dauert, dann möchte ich per Javascript auf eine andereSeite weiterverweisen (auf der z.B.: Verbindungsfehler! steht).
Also der Timer sollte die Zeit zwischen REQUEST und RESPOSE messen und nach jedem Response auf eine Anfrage sollte der Timer neu starten.
Wie kann ich das am Besten machen?
lg
Also der Timer sollte die Zeit zwischen REQUEST und RESPOSE messen und nach jedem Response auf eine Anfrage sollte der Timer neu starten.
Wo ist das Problem?
Wie kann ich das am Besten machen?
Du setzt einen Timestamp beim starten des Request und vergleichst die vergangene Zeit wenn der Request fertig ist.
Struppi.
Wo ist das Problem?
wenn ich einen Request absende und nichts mehr zurückbekomme dann hab ich ein problem, daher bräuchte ich so eine Art timer, dne ich stoppen kann, wenn ich etwas empfangen habe und wenn nach einer gewissen Zeit nichts empfangen wurde, dann wird eben der Timer schlagend und führt eine Methode aus.
Wie könnte ich das am besten realisieren mit Javascript?
lg
Wo ist das Problem?
wenn ich einen Request absende und nichts mehr zurückbekomme ..
Wieso bekommst du nichts zurück? Der AJAX Request hat doch einen entsprechenden Handler wo du verschiedene Ereignisse abfangen kannst.
Struppi.
Wieso bekommst du nichts zurück? Der AJAX Request hat doch einen entsprechenden Handler wo du verschiedene Ereignisse abfangen kannst.
Wenn z.B.: die Verbindung abgerissen ist und vorher noch ein Request gesendet wurde, dann bekomme ich nichtsmehr zurück,
Ich gebe zu, dass das nicht so oft der Fall sein wird, aber ich möchte das auf jeden Fall auch abdecken,
Der zweite Fall ist, wenn ich die Webseite öffne, aber keinen Button drücke, dann sollte auch das Timeout nach einer bestimmten zeit schlagend werden,
Fällt dir dazu noch eine Möglichkeit ein, wie ich das am Besten realisieren könnte?
Wieso bekommst du nichts zurück? Der AJAX Request hat doch einen entsprechenden Handler wo du verschiedene Ereignisse abfangen kannst.
Wenn z.B.: die Verbindung abgerissen ist und vorher noch ein Request gesendet wurde, dann bekomme ich nichtsmehr zurück,
Natürlich, einen 408er Status.
Der zweite Fall ist, wenn ich die Webseite öffne, aber keinen Button drücke, dann sollte auch das Timeout nach einer bestimmten zeit schlagend werden,
Das hat dann aber nichts mit AJAX zu tun.
Fällt dir dazu noch eine Möglichkeit ein, wie ich das am Besten realisieren könnte?
Entweder mit Timeout, in dem du bei jeder Aktion den alten Timeout unterbrichst und einen neuen startest. Oder in Intervalen prüfen ob und wann eine Aktion zuletzt gestartet wurde.
Struppi.
Entweder mit Timeout, in dem du bei jeder Aktion den alten Timeout unterbrichst und einen neuen startest
wie könnte ich das machen, meine 2 Funktionen schauen so aus:
function requestToServer() {
if(trigger == true) {
if(request == null)
createRequest();
var url = 'ServletController';
request.open("post", url, true);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.onreadystatechange = responseFromServer;
startrequest = new Date().getTime();
timeout = window.setTimeout("dedectResponse();", 5000);
// in der Funktion dedectResponse steht noch nichts drinnen
request.send('clientID=' + clientID);
}
}
function responseFromServer() {
if(request.readyState == 4) {
if(request.status == 200) {
getresponse = new Date().getTime();
var response = request.responseText;
var zahlContainer = document.getElementById('zahl');
var textElement = document.createTextNode(response);
if(zahlContainer.firstChild != null)
zahlContainer.replaceChild(textElement, zahlContainer.firstChild);
else
zahlContainer.appendChild(textElement, zahlContainer.firstChild);
requestToServer();
}
}
}
function responseFromServer() {
if(request.readyState == 4) {
Keine Wunder, dass du denkst, dass du keine Antwort bei einem Fehler bekommst, du ignorierst hier ja die Antwort.
Du muss den Timer hier an dieser Stelle beenden. Der status kann dann aber natürlich von 200 abweichen.
Struppi.