jspit
Lounge-Member
In einer Textdatei liegen Informationen, die per FTP laufend aktualisiert werden. Diese Informationen möchte ich zyklisch per Ajax einlesen um bestimmte Objekte der Seite aktualisieren. Das Ganze soll so gestaltet werden, daß seitenspezifische Aktionen und alles was xhr/timer betrifft so wenig wie möglich vermischt werden.
Da ich noch nicht viel mit Ajax gearbeitet habe, möchte ich bevor ich mich verenne meinen Ansatz hier vorstellen:
Kommentare zum Code:
- Auf Uraltbrowser < IE 5.5 wurde verzichtet. Dadurch entfällt das übliche try case für die ActiveX-Varianten.
- Es existiert eine function myfkt für die seitenspezifischen Aktionen welche einmalig/zyklisch aufgrufen wird.
- Aktiviert wird das Ganze durch GetTxt mit den Parametern Dateiname, Funktionsname und Aktualisierungsintervall. Fehlt das Intervall oder ist es 0 wird der Request nur eimalig ausgeführt.
- Das ist auch für ein Einlesen von js geeignet, myfkt muss dafür minimal erweitert werden.
- Es wurde minimaler Codeumfang angestrebt mit Blickrichtung auf Embedded-Webserver
Das Ganze scheint erstmal so zu funktionieren. Nun meine Fragen/Problemchen:
- ist so etwas notwendig um ein eventuelles Cacheproblem zu umgehen?
xho.open('post', csurl + "?r=" + Math.round(Math.random()*1000), true);
- Gibt es eine Alternative für die Zuweisungen csurl = surl; usw.
Bin auch dankbar für Tipps + Kommentare.
Da ich noch nicht viel mit Ajax gearbeitet habe, möchte ich bevor ich mich verenne meinen Ansatz hier vorstellen:
PHP:
<html>
<head>
<title>Ajax Test 3</title>
<script type="text/javascript">
function xhpj() {
var xho = window.XMLHttpRequest? new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP"); //IE ab 5.5
var csurl, cfkt, czyksek, to;
var rfkt = function(){
if (xho) {
xho.open('post', csurl , true);
xho.onreadystatechange = function () {
if (xho.readyState == 4) cfkt(xho.responseText);
}
xho.send(null);
if(czyksek) to=window.setTimeout(rfkt,czyksek * 1000);
};
}
this.GetTxt = function (surl,fkt,zyksek) {
csurl = surl;
cfkt = fkt;
czyksek = zyksek;
if (xho) rfkt();
}
this.ClearZyk = function (){window.clearTimeout(to);}
}
//seitenspezifische function
function myfkt(rText){
document.getElementById("testdiv").innerHTML = rText;
}
//Objectinstanz erzeugen
var myxmlhttp = new xhpj();
//test.txt wird alle 2 Sekunden eingelesen und dann myfkt aufgerufen
myxmlhttp.GetTxt("test.txt",myfkt,2);
</script>
</head><body>
<div id="testdiv">test</div>
<button onclick="myxmlhttp.ClearZyk()">Stop</button>
</body></html>
Kommentare zum Code:
- Auf Uraltbrowser < IE 5.5 wurde verzichtet. Dadurch entfällt das übliche try case für die ActiveX-Varianten.
- Es existiert eine function myfkt für die seitenspezifischen Aktionen welche einmalig/zyklisch aufgrufen wird.
- Aktiviert wird das Ganze durch GetTxt mit den Parametern Dateiname, Funktionsname und Aktualisierungsintervall. Fehlt das Intervall oder ist es 0 wird der Request nur eimalig ausgeführt.
- Das ist auch für ein Einlesen von js geeignet, myfkt muss dafür minimal erweitert werden.
- Es wurde minimaler Codeumfang angestrebt mit Blickrichtung auf Embedded-Webserver
Das Ganze scheint erstmal so zu funktionieren. Nun meine Fragen/Problemchen:
- ist so etwas notwendig um ein eventuelles Cacheproblem zu umgehen?
xho.open('post', csurl + "?r=" + Math.round(Math.random()*1000), true);
- Gibt es eine Alternative für die Zuweisungen csurl = surl; usw.
Bin auch dankbar für Tipps + Kommentare.
Zuletzt bearbeitet: