• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

[ajax] firefox macht alles erst beim zweiten mal

klausbyte

Spiele-Kenner/in
Mitglied seit
22.03.2001
Beiträge
3.863
Reaktionspunkte
204
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)
}
und ruf dann beim onload in noch einer init funktion die aufrufen() und die boxBand() auf.
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.
 
hi, ich hatte den async parameter nicht true gesetzt, flüchtigkeitsfehler und hat 12 stunden gekostet :(

boxband.open("GET", "ajax.box.php?what=band", true);

nur falls nochmal jemand sowas passiert.
 
klausbyte am 26.07.2007 10:20 schrieb:
weis net wie sich das lizensrechtlich verhällt mit denen.

scriptaculous: http://wiki.script.aculo.us/scriptaculous/show/License
prototype: http://dev.rubyonrails.org/browser/spinoffs/prototype/trunk/LICENSE?format=raw bzw. http://creativecommons.org/licenses/by-sa/3.0/

auserdem lern ich gern alles "from the scratch"

dagegen ist sicher nichts zu sagen. :)
 
Zurück