16. marts 2007 - 14:51Der er
22 kommentarer og 1 løsning
AJAX cacher. Få den til at holde op!
Jeg har ikke kunne undgå at opdage AJAX, og er gået hen og blevet ret vild med det efterhånden.
Så længe den kun henter statisk indhold, f.eks. fra HTML-sider, er der intet problem. Men jeg har lagt mærke til at den cacher indholdet meget længe. Altså, når jeg ændrer i den side jeg henter via AJAX, får jeg stadig den gamle i lang tid efter, selvom jeg trykker Ctrl+Shift+R i Fx, som burde rydde cachen for den side.
Hvis jeg nu begynder at lægge noget mere dynamisk indhold på den side, vil det jo være et kæmpe problem. Så det simple spørgsmål er sådan set:
Hvordan får jeg AJAX til at hente siden fra serveren HVER gang, og altså ikke cache noget?
Jeg ved godt jeg ikke returnerer dataene i JSON eller XML, men stadig.
Umiddelbart laver jeg bare et XMLHttpRequest objekt, bruger det til at loade en PHP side, og sætter hele siden ind på sitet, via obj.innerHTML = http.responseText.
Jeg ved ikke om du ligefrem har brug for at se kode, men igen - jeg vil bare have at siden altid hentes fra serveren, når jeg bruger http.open()
Heh :) Det er jo smart. Så kan jeg gemme en md5(microtime()) i en session variabel i PHP, når folk besøger siden. På den måde kan jeg sørge for at den altid loader fra serveren første gang folk besøger siden i én session, men stadig forhindre server overload fordi den henter fra den hver gang.
Ja, det foreslog erikjacobsen også :) Jeg tænkte bare at hvis jeg gemmer den i en PHP session, kan jeg sørge for at den kun henter fra serveren én gang per besøg, og derfor ikke belaster den unødigt. I lige netop dette tilfælde handler det bare om, at jeg gerne vil have at folk, der besøger siden efter den er opdateret, ser nyeste version, og ikke den samme som sidste gang de besøgte (og cachede) siden.
En anden vigtig ting er, at man bør oprette et nyt XMLHttpRequest-objekt, hvergang serveren request'es - og destruere det igen, såsnart responsen er modtaget ;o)
Det kommer helt anpå, om http-objektet indlejres i et JS-objekt, eller 'hænger frit svævende' i koden. Generelt sætter man et objekt til værdien null - men der kan også være tale om event-handlers, der skal dræbes (onreadystatechange-event'ens, f.eks.)
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.