PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
XMLHttpRequest zeitgesteuert mit setTimeout
#1
Hi,

Ich habe folgenden JS-Code:
Code:
var oXmlHttp = new XMLHttpRequest();
oXmlHttp.addEventListener( 'load', function() { alert( this.responseText ); });


window.onload = function() { reload(); }


function reload() {

    oXmlHttp.abort();

    oXmlHttp.open( 'GET', 'process.php?reload=1', true );
    oXmlHttp.send();

    setTimeout( 'reload', 3000 );

}
Der Aufruf und der Request werden einmal sauber verarbeitet, allerdings greift das setTimeout nicht wirklich, es werden keinen weiteren Daten mehr geladen.
Muss ich das XmlHtp-Objekt irgendwie jedesmal resetten? abort() habe ich ja schon drin, wirkt aber nicht.

Wo denke ich falsch?
Danke
Antworten
#2
Kein jQuery? Sad

Ich habe mit rohen XMLHttpRequests seit Jahren nicht mehr gearbeitet und weiß auch nicht ob sie "wiederverwendbar" sind. Nutze am besten für jeden Request ein eigenes XMLHttpRequest.

Achja, und setz den Timeout im finish-handler, sonst wirst du komische Ergebnisse bekommen, wenn es grade Verbindungsprobleme gibt und der Request mehr als 3 Sekunden dauert.

Code:
window.onload = reload;

function reload() {
    var oXmlHttp = new XMLHttpRequest();
    oXmlHttp.onreadystatechange = function() {
        if(oXmlHttp.readyState !== 4) return; //4 == DONE
        setTimeout(reload, 3000 );
        alert( oXmlHttp.responseText );
    };
    oXmlHttp.open( 'GET', 'process.php?reload=1', true );
    oXmlHttp.send();
}
Antworten
#3
Hi,

Das ist nur ein kleines Projekt, was nicht viel JS braucht und nur für den Request möchte ich keine Libraries oder Frameworks einbinden müssen.

Danke für Dein Beispiel. So ähnlich hatte ich es auch mal, bis auf den setTimeout im Handler drin.
Leider ändert das nichts am Verhalten, nach dem Laden der Seite läuft einmal alles sauber durch, aber danach nie wieder.

So sieht die Funktion derzeit aus:
Code:
function reload() {

     var oXmlHttp = new XMLHttpRequest();
     oXmlHttp.onreadystatechange = function () {

         if ( oXmlHttp.readyState !== XMLHttpRequest.DONE )
             return;

         setTimeout( reload, 3000 );
         alert( oXmlHttp.responseText );

     };

     oXmlHttp.open( 'GET', 'process.php?reload=1', true );
     oXmlHttp.send();

}
Antworten
#4
Hab es so wie du es da hast, 1 zu 1 (nur URL geändert) in JSFiddle reinkopiert:

https://jsfiddle.net/kcv9bxLt/

Bei mir ploppt das alert alle 3 Sekunden auf.
Antworten
#5
Verdammt... Du hast recht!
Dann kann es ja nur Server seitig hängen. Evtl. die .htaccess? Wobei ich mich frage, warum es beim ersten mal funktioniert.
Egal, dann muss ich wohl an anderer Stelle suchen.

Danke Dir!
Gruß Arne
Antworten
#6
Ich habe eben erst bemerkt, dass die Änderungen des Scripts gar nicht hochgeladen wurden, weil mein FTP-Client das Passwort bestätigt haben wollte. Big Grin

Jetzt funktioniert es, wie es soll.
Ich vermute es lag daran, dass ich den Timeout nicht im Handle hatte, denn sonst habe ich es anfangs mal genau so gehabt.

Super, danke für deine Mühe!
Gruß Arne
Antworten
#7
Schau mal ins Netzwerk-Tab. Wobei ich eher glaube, dass die Funktion "reload" wohl irgendwo überschrieben wird oder so, weil auch bei einem Fehler der Request irgendwann Fertig (DONE) ist.

So z.B. kann ich den Fehler nämlich reproduzieren: https://jsfiddle.net/kcv9bxLt/1/
Antworten
#8
Ja, den Netzwerktab hatte ich grundsätzlich immer beobachtet, dort wurde nichts protokolliert. Keine Fehler, Warnungen, Hinweise... Ein Traum für jeden Entwickler. Big Grin
Da konnte man leider gar nichts erkennen.

Überschrieben hätte dort eigentlich auch nichts können, denn mehr als das, was ich i #1 gepostet habe, ist an JavaScript noch gar nicht vorhanden.

Aber nun läuft es ja, dank Deiner Hinweise.
Gruß Arne
Antworten


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  XMLHttpRequest und FTP Till 6 273 18.01.2017, 20:10
Letzter Beitrag: Till

Gehe zu: