Avatar billede spil2vind Nybegynder
05. november 2013 - 17:27 Der er 5 kommentarer og
1 løsning

Bruge AJAX til at opdater data på hjemmeside

Hej alle

Jeg er begyndt at få problemer med at mine AJAX kald ikke virker korrekt efter at de forskellige browsere cacher, for det er hvad jeg tror er problemet.

Jeg har lavet et eksempel på mit problem på min hjemmeside http://www.spil2vind.dk/test.php

Når man klikker på knappen skriver den blandt klokkeslættet.

Det virker første gang, men anden gang sker der ikke noget, sletter man browserens cache virker det en gang.

Test.php ser således ud:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Language" content="da">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<script>

function loadXMLDoc() {
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
  }
}
xmlhttp.open("GET","checkdatatips12a.php?q=tips12rigtige",true);
xmlhttp.send();
}
</script>
</head>
<body>
<h2>AJAX</h2>
<button type="button" onclick="loadXMLDoc()">Request data</button>
<div id="myDiv"></div>
</body>
</html>

Håber der er nogen der kender til hvorledes man fortæller browserne at de ikke skal cache, har prøvet med Pragma og expires uden held.

Pft
Carsten
Avatar billede spil2vind Nybegynder
05. november 2013 - 19:18 #1
Tror at jeg har fundet noget som har fået det til at virke korrekt, er der nogen som har kommentarer, hører dem gerne

<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
Avatar billede moddi100 Seniormester
05. november 2013 - 19:25 #2
Generel cache er en måde at gøre det på, men så gælder det også for alle dine andre sider, medmindre du kun anvender det på den url du hiver din data ud fra?

Alternativt kan du forhindre at den samme url bliver kaldt igen nogensinde. Uanset cache, vil det altid tolkes som en ny og ukendt side, som skal hentes fra webserveren og ikke cachen:


xmlhttp.open("GET","checkdatatips12a.php?q=tips12rigtige&ts=" + new Date().getTime(),true); // Bemærk at vi blot tilføjer tiden udtrykt i millisekunder
xmlhttp.send();
Avatar billede spil2vind Nybegynder
05. november 2013 - 19:40 #3
Jeg kan helt klart fælge dig, da det vil være allerbedst at kunne angive hvilke kald der ikke må cashes, min ajax kald henter normalt data fra databasen, så det vil ikke være muligt at putte det ind i kaldet, det med klokkeslættet var mere for at kunne se om det virkede.
Avatar billede moddi100 Seniormester
05. november 2013 - 19:51 #4
Jamen hvis det er tilfældet, så er det netop #2 du bør kigge nærmere på. Tilføj blot følgende til dine links, og det virker uden videre:


// Dette
xmlhttp.open("GET","checkdatatips12a.php?q=tips12rigtige",true);

// Bliver til
xmlhttp.open("GET","checkdatatips12a.php?q=tips12rigtige&ts=" + new Date().getTime(),true);


Det må da siges at være en simpel og effektiv løsning. Det er sådan set samme princip jquery og flere af de andre javascript-biblioteker anvender.
Avatar billede spil2vind Nybegynder
05. november 2013 - 19:55 #5
ok, nu tror jeg at jeg forstået din pointe, at web serveren tror at det er en ny side bare fordi tallet er forskelligt fra sidst, smid et svar hvis det er opfattet korrekt.
Avatar billede moddi100 Seniormester
05. november 2013 - 20:05 #6
Bingo! :) Måske jeg var lidt uklar, men det er netop hvad hensigten er.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester