hi,
ich bastel wieder etwas an meiner Website herum und benutze sehr viel Javascript. Wenn man ein link anklickt wird zb. nur der teil geladen der sich ändern soll, dank XMLHttpRequest.
Ich wollt mein Ladescreen Testen und hab eine php datei gemacht die ungefähr so aussieht:
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Content-type: application/xml");
sleep(2);
?>
nur mit Sleep im php baut das javascript die Seite aus irgend einem Grund nicht auf.
Ohne Sleep funktioniert es einwandfrei.
mein Javascript Code:
//funktion zum erstellen eines http request
function httpRequest()
{
try
{
return new XMLHttpRequest(); //Request für Netscape und andere Browser
}
catch(e)
{
try
{
return new ActiveXObject("Microsoft.XMLHTTP"); //Request für IE
}
catch(e)
{
return false;
}
}
}
////Ladesystem für neue Seiten
var letzterCheck = " ";
var siteRequester = httpRequest();
//funktion zum überprüfen ob es immer noch die selbe Seite ist
function checkSite(neueSeite)
{
if(neueSeite == null)//überprüft ob die funktion NICHT mit dem laden eine neuen Seite beauftragt wurde
{
if(location.hash == letzterCheck)//überprüfen ob es immer noch die selbe Seite ist
return null;//wenn dann wird die funktion abgebrochen
if(location.hash == "" || location.hash == "#")//wenn noch kein adress hash vorhanden
{
neueSeite = "#start";
letzterCheck = "";
}
else
{
neueSeite = location.hash;
letzterCheck = neueSeite;
}
}
else//wenn wegen einer neuen Seite aufgerufen
{
if(neueSeite == "")
{
neueSeite = "#start";
location.hash = "";
letzterCheck = "";
}
else
{
location.hash = neueSeite.substr(1);
letzterCheck = neueSeite;
}
}
//lade Seite
startScreen("main"); //startet einen schwarzen Screen auf dem div Container Main
siteRequester.open("GET", "/lade?seite=" + neueSeite.substr(1));
siteRequester.send(null);
return false;
}
//funktion zum späteren aufbau der Seite
function buildSite()
{
if(siteRequester.readyState >= 4) return null;//wenn noch nicht fertig geladen ist funktion abbrechen
if(siteRequester.status != 200)//wenn fehler aufgetreten ist
return null;//funktion abbrechen
stopScreen("main");
var inhalt = siteRequester.responseXML;
document.getElementById("main").innerHTML = inhalt.getElementsByTagName("html")[0].childNodes[0].nodeValue;
return null;
}
siteRequester.onreadystatechange = buildSite;
checkSite(null);//erste überprüfung damit die Seite aufgebaut wird
window.setInterval("checkSite(null)",200);
Alles anzeigen
Die Funktionen startScreen und stopScreen funktionieren garantiert und auch ein alert in der Funktion buildSite funktioniert IMMER.
Trodsdem baut er die Seite machmal nach einem reload nicht auf und stopt auch den lade Screen nicht.
Der Request wird aber gestartet (Gott segne Firebug)
Ich hab dieses Phänomen im Firefox 3.5 und im IE 8. Andere Browser hab ich noch nicht ausprobiert
wenn ihr es euch angucken wollt:
http://www.sett.xe.cx/#wait (Seite ändert sich ständig)
Ich weiß nicht ob ich etwas falsch mache oder ob das "normal ist" wenn er die Seite evt. noch nicht fertig geladen hat.