Strange: Meldung bei verlorener Verbindung?

Schönen guten Tag,

ich habe eine kleine Frage, bezüglich abbrechender Verbindungen.

Meine Seite arbeitet mit PHP, Sessions, Ajax Updater und JS für den Client.

Alle drei Sekunden startet ein Request.

Das Problem ist, wenn die Verbindung aufgrund von Instabilem Internet oder kurzzeitiger Unerreichbarkeit des Server abreisst, merken meine Nutzer nichts davon.

Gibt es eine Möglichkeit das zu ändern und wenn ja, in welchem Bereich müsste ich das anstellen?

Ich dachte da evtl an ein Popup "Verbindung zum Server verloren" oder einen alert, meinetwegen auch eine Rückleitung auf die index.php.

Wäre für Ideen und Denkanstöße offen.

Danke schonmal im vorraus.

  1. Hi,

    Meine Seite arbeitet mit PHP, Sessions, Ajax Updater und JS für den Client.

    Alle drei Sekunden startet ein Request.

    Das Problem ist, wenn die Verbindung aufgrund von Instabilem Internet oder kurzzeitiger Unerreichbarkeit des Server abreisst, merken meine Nutzer nichts davon.

    Erst mal solltest du überdenken, das Interval etwas zu vergrössern - denn wenn du den Server derart oft "nervst", geht er auch schneller in die Knie, zumindest wenn erst mal entsprechende Nutzerzahlen erreicht sind.

    Gibt es eine Möglichkeit das zu ändern und wenn ja, in welchem Bereich müsste ich das anstellen?

    Im IE 8 wird eine timeout-Eigenschaft für das XMLHttpRequest-Objekt eingeführt; andere Browser kennen eine solche aber m.W. nicht.
    Da müsste man also selbst einen Timeout "parallel" zum Request laufen lassen - und in dessen Abarbeitung dann den Status des Requests prüfen, ihn ggf. abbrechen, und darauf reagieren.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
  2. Die üblichen JS-Frameworks bieten dir Error-Handler bei Ajax-Requests. Wenn ein Timeout eintritt, wird dieser Error-Handler gefeuert. Beispielsweise jQuery:

    $.ajax({  
       method : 'GET',  
       url : '...',  
       timeout : 3000, // 3 Sekunden Timeout  
       success : function (responseText) {  
          alert('alles OK');  
       },  
       error : function (xmlhttp, errorMessage) {  
          if (errorMessage == 'timeout') {  
             alert('Verbindung zum Server verloren');  
             // Weitere Fehlerbehandlung  
          }  
       }  
    });
    

    Allerdings kann ein Timeout immer mal passieren und das ist an sich nichts schlimmes. Nach drei Sekunden wird einfach ein weiterer Request gesendet. Es kann sein, dass der wieder funktioniert. Erst wenn mehrere Timeouts nacheinander kommen, würde ich den Benutzer benachrichtigen.

    Mathias

    1. $.ajax({

      method : 'GET',
         url : '...',
         timeout : 3000, // 3 Sekunden Timeout
         success : function (responseText) {
            alert('alles OK');
         },
         error : function (xmlhttp, errorMessage) {
            if (errorMessage == 'timeout') {
               alert('Verbindung zum Server verloren');
               // Weitere Fehlerbehandlung
            }
         }
      });

        
      Das sieht super aus, aber in welchen Bereich muss ich das setzen?  
      Schon in den Updater, nech?  
      Oder doch in den JS Part oder gar den geringen HTML Part?
      
      1. Das sieht super aus, aber in welchen Bereich muss ich das setzen?
        Schon in den Updater, nech?
        Oder doch in den JS Part oder gar den geringen HTML Part?

        Erstmal war das ein Beispiel, wie man es mit der Bibliothek jQuery umsetzen würde. Wenn du es direktübernehmen willst, musst du natürlich jQuery einbinden. Benutzt du schon irgendeine Bibliothek, wie setzt du es derzeit um? Direkt mit XMLHttpRequest?

        An welche Stelle du das setzen musst: Dort in den Javascript-Code, wo der Ajax-Request abgesendet und verarbeitet werden soll, denn das macht obiger Code.

        Mathias

  3. Hmmm, intressant!
    Ja, das ist so, aber was soll man da tun?
    Es ist wie es ist, anders könnte es garnicht kommen, als es ist. So ist das!