https://www.php-rocks.de/mitglieder/2-arne-drews.html
Registriert seit: 18.03.2015 | Themen: 59 | Beiträge: 364
Bewertung:
14
PHP Selbsteinschätzung: Fortgeschrittene Kenntnisse
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
https://www.php-rocks.de/mitglieder/4-tkausl.html
Registriert seit: 19.03.2015 | Themen: 6 | Beiträge: 37
Bewertung:
3
PHP Selbsteinschätzung: Fortgeschrittene Kenntnisse
Kein jQuery?
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();
}
https://www.php-rocks.de/mitglieder/2-arne-drews.html
Registriert seit: 18.03.2015 | Themen: 59 | Beiträge: 364
Bewertung:
14
PHP Selbsteinschätzung: Fortgeschrittene Kenntnisse
23.11.2016, 18:04
Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2016, 18:05 von Arne Drews.
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();
}
https://www.php-rocks.de/mitglieder/4-tkausl.html
Registriert seit: 19.03.2015 | Themen: 6 | Beiträge: 37
Bewertung:
3
PHP Selbsteinschätzung: Fortgeschrittene Kenntnisse
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.
https://www.php-rocks.de/mitglieder/2-arne-drews.html
Registriert seit: 18.03.2015 | Themen: 59 | Beiträge: 364
Bewertung:
14
PHP Selbsteinschätzung: Fortgeschrittene Kenntnisse
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
https://www.php-rocks.de/mitglieder/2-arne-drews.html
Registriert seit: 18.03.2015 | Themen: 59 | Beiträge: 364
Bewertung:
14
PHP Selbsteinschätzung: Fortgeschrittene Kenntnisse
Ich habe eben erst bemerkt, dass die Änderungen des Scripts gar nicht hochgeladen wurden, weil mein FTP-Client das Passwort bestätigt haben wollte.
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
https://www.php-rocks.de/mitglieder/4-tkausl.html
Registriert seit: 19.03.2015 | Themen: 6 | Beiträge: 37
Bewertung:
3
PHP Selbsteinschätzung: Fortgeschrittene Kenntnisse
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/
https://www.php-rocks.de/mitglieder/2-arne-drews.html
Registriert seit: 18.03.2015 | Themen: 59 | Beiträge: 364
Bewertung:
14
PHP Selbsteinschätzung: Fortgeschrittene Kenntnisse
Ja, den Netzwerktab hatte ich grundsätzlich immer beobachtet, dort wurde nichts protokolliert. Keine Fehler, Warnungen, Hinweise... Ein Traum für jeden Entwickler.
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