14. april 2010 - 00:51Der er
7 kommentarer og 1 løsning
Javascript onclick som skal hente php side (Ajax) virker ikke
Hej,
Med min nedenviste kode, vil jeg:
1) Opdatere en tidsstempel (den virker) 2) Hente en php fil som pt. kun indeholder et navn i hver række
Når jeg loader siden første gang, så henter den fint navnene og viser dem, men når jeg så opdaterer php filen med et navn og klikker på knappen, opdaterer den ikke navnelisten.
Javascript kode: function datetime() { var datetime = new Date() var hr = datetime.getHours() var min = datetime.getMinutes() if (hr < 10) { hr = " " + hr } if (min < 10) { min = "0" + min } document.getElementById("digits").innerHTML = hr + ":" + min }
function refreshUserList() {
//Her opdateres tid datetime();
//Her hentes siden med brugere på chatten xmlhttp = GetXmlHttpObject(); if (xmlhttp == null) { alert("Browser does not support HTTP Request"); return; } var url = "getUserList2.php"; xmlhttp.onreadystatechange = stateChanged; xmlhttp.open("GET", url, true); xmlhttp.send(null);
}
function stateChanged() { if (xmlhttp.readyState == 4) { document.getElementById("userChatList").innerHTML = xmlhttp.responseText; } }
function GetXmlHttpObject() { if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari return new XMLHttpRequest(); } if (window.ActiveXObject) { // code for IE6, IE5 return new ActiveXObject("Microsoft.XMLHTTP"); } return null; }
Og inden I spørger - php siden kommer der noget database udtræk - som jeg ved virker - har bare ikke apache server installeret på min side - så er nødt til at gøre lige som om :-)
(ændrede det til en aspx fordi jeg fik en fejl og troede det havde noget at gøre med det er en php side, jeg henter ind på en aspx side)
Men nu fejler den så hele tiden og skriver følgende:
The resource cannot be found. Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
@ole Det er ikke altid det virker. Nu har jeg lavet en del test på det og fundet frem til at i IE er det sikreste at fjerne cache fra den side som bliver hentet via AJAX.
Dette kan gøres ved at tilføje en header.
E.g. <?php header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); ?>
Jeg har arbejdet med Ajax og pre-Ajax teknikker i 10 år, så jeg er ikke i tvivl om, hvordan man udfører cache control på serveren. Men kan du ikke lige vise os de test, du har lavet, som du mener gør, at IE cacher siden, når du bruger post.
Det er aldrig lykkedes mig at få IE til at cache ved post - jeg har aldrig læst/hørt om nogen, der har været ude for det - og rent teknisk kan jeg ikke forestille mig, hvad der skulle få det til at ske =)
Prøvede lige at vende tilbage til den test jeg havde lavet. Og nu virkede det selvfølgelig med POST. Da jeg ændre metoden tilbage til GET blev siden cachet.
Men... Da jeg så ændrede metoden tilbage til POST igen, blev den ved med at cache siden.
Så det var derfor at jeg nåede til den konklusion. Så det er kun rent teknisk at man kan snyde sig selv. Jeg har dog ingen forklaring på dette.
<script language="JavaScript" type="text/javascript"> var getid = getXmlHttpRequestObject(); var id = ""; function getXmlHttpRequestObject() { if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if(window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); } }
function update(){ getid.onreadystatechange=lastid; var randomnumber=Math.floor(Math.random()*10001) url = 'random.php?' getid.open("POST","random.php",true); getid.send(null); setTimeout('update();',1000); }
function lastid(){ if (getid.readyState==4) { document.getElementById("screen").innerHTML = getid.responseText; document.getElementById("status").innerHTML = getid.status;
} } update(); </script>
___random.php___ <?php //header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); //header("Cache-Control: no-store, no-cache, must-revalidate"); //header("Cache-Control: post-check=0, pre-check=0", false); //header("Pragma: no-cache"); srand(time()); $random = (rand()%9999); print("random number between 0 and 9999 is: $random"); ?>
Det er muligt, at du kan fremtvinge en fejl på den måde. Det er dog ikke et realistisk scenarium i den virkelige verden, så jeg tror på dig og springer testen over =)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.