Code:
function boxBand() {
boxband.open("GET", "ajax.box.php?what=band");
boxband.send(null);
boxband.onreadystatechange = function() {
alert(boxband.readyState);
if(boxband.readyState == 4){
var lulu = boxband.responseText;
var objekt = eval("(" + lulu + ")");
for(var i in objekt){
//zeilen aufbereiten
}
//zeilen zusammenfügen
}
};
setTimeout("boxBand()", 4000);
}
Das Script aktualisiert eine kleine box am Rand der Seite im Abstand von (momentan und testweise) 4 sekunden. zumindest soll es das.
tun tut es in:
ie 7
opera 9
safari
neuer netscape beta 2
im neusten firefox tuts das nicht.
es wartet 4 sek und führt dann erst alles aus.
es dauert 4 sekunden bis der readystatewechsel kommt, der ist gleich auf 4.
in den anderen getesteten browsern kommt 2,3,4 nacheinander und dann kommts instant.
aufgerufen wird die funktion schon direkt beim seitenladen, wenn ich ein alert ganz an den anfang setze, nur danach tut sich in sachen xmlhttp nix.
Hat es mit dem php header zu tun?
Code:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
header("Cache-Control: no-cache, must-revalidate" );
header("Pragma: no-cache" );
header("Content-Type: text; charset=utf-8");
oder spreche ich die Funktion settimeout falsch an?
geladen wird die funktion das erste mal im body onload, und soll sich dann selbst alle {intervall} sekunden ändern.
evtl. ne zwischenfunktion:
Code:
function aufrufen() {
boxBand();
setTimeout("aufrufen()", 5000)
}
DENN wenn ichs zweimal hintereinander von einer initalisierungsfunktion bei onload laden lasse, gehts au sofort. aber das wär ja dann net grad sehr elegant, au von der prozessorzeit her net
wie gesagt ich denk es liegt am header und hoffe das mir wer helfen kann
generell macht firefox ALLES erst beim zweiten mal was mit ajax zu tun hat.
auch bei post-requests.
so erzeuge ich mein xmlhttp objekt:
Code:
if(window.XMLHttpRequest) {
return new XMLHttpRequest();
}
else if(window.ActiveXObject) {
try {
return new ActiveXObject("Msxml2.XMLHTTP");
}
catch(ex) {
try {
return new ActiveXObject("Microsoft.XMLHTTP");
}
catch(ex) {
}
}
}
}
dann "instanziere" ich es vor der eigentlichen funktion (die bei klick oder sowas aktiviert wird) mit
Code:
var bla = xmltthp();
function macheBeiKlick(lala) {
bla.open(args);
/..
}
wie gesagt der status wechselt sich davor nicht.