Avatar billede sbay Nybegynder
16. december 2008 - 14:43 Der er 11 kommentarer

Ajax caching i IE

Hejsa

Jeg har en del ajax-kode der fungerer efter hensigten. Det eneste jeg virkelig ikke kan greje, er hvordan jeg kan få IE til at lade være med at cache ajax-forespørgelsen. Jeg har 10 opslag på samme side, men der skal den gerne hente nye oplysninger hver gang. Kaldet er det samme, men databasen, hvor der hentes fra ændre sig mellem hvert opslag. Selvom der tilføjes hele 2 forskellige random variabler (rndval=1229434255389&rnd=94942.05890503667), så laver den samme opslag... AHHHHH - jeg har prøvet stort set alt jeg har kunnet google...

requesten ser sådan ud:
this.xmlhttp.send(this.URLString+"&rnd="+ Math.random()*99999999);
Avatar billede softspot Forsker
16. december 2008 - 14:53 #1
Jeg ville prøve at tilføje random-parameteren til URL'en i xmlhttp.open i stedet, for det er, efter min bedste overbevisning, der browseren finder ud af om cachen skal benyttes, eller om en ny siden skal hentes.

Eksempel:

xmlhttp.open("POST", url + "?ts=" + (new Date()).getTime(), true);
Avatar billede jokkejensen Novice
16. december 2008 - 14:55 #2
og skal this.URLString returnere noget unikt ud fra rnd querystrengen ?

/J
Avatar billede fennec Nybegynder
16. december 2008 - 14:57 #3
Hvad slags server side sprog kører du (ASP/PHP)??
Her kan du også sætte om den skal cashe eller ej.
Avatar billede sbay Nybegynder
16. december 2008 - 15:08 #4
Jeg bruger PHP. Nej der skal ikke returneres noget ud fra rnd! Hvis jeg skifter GET ud med POST virker det koden slet ikke.

Open-requesten ser nu sådan ud, men lige lidt hjælper det :-( :

if (this.xmlhttp) {
var self = this;
if (this.method == "GET") {
totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
this.xmlhttp.open(this.method, totalurlstring+"&rnd="+ Math.random()*99999999 , true);
} else {
this.xmlhttp.open(this.method, this.requestFile+"&rnd="+ Math.random()*99999999, true);
try {
this.xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 29 Oct 1972 19:43:31 GMT")
} catch (e) { }
}
Avatar billede sbay Nybegynder
16. december 2008 - 15:18 #5
Hvis der er en der ved hvor jeg kan finde en Google suggest agtig kode, med typeahead, er jeg klar på at lave det hele om - forudsat det selvfølgelig kan undgå caching :-)
Avatar billede olebole Juniormester
16. december 2008 - 16:04 #6
<ole>

Hvis du bruger POST, skal du sætte en Content-Type header - f.eks (hvis du returnerer data som JSON):
    xmlhttp.open("post", sUrl, true);
    xmlhttp.setRequestHeader("Content-Type: application/json; charset=utf-8");
    xmlhttp.send(sQuery);

Jeg har aldrig set caching i IE ved brug af POST, så det burde helt klart virke efter hensigten

/mvh
</bole>
Avatar billede sbay Nybegynder
17. december 2008 - 10:43 #7
Hejsa

Nu fik jeg det endelig til at virke - kan dog ikke forklare præcist hvad jeg har gjort.... smid et svar allesammen så frdeler jeg point efter hvordan jeg mener det har hjulper :-)
Avatar billede fennec Nybegynder
17. december 2008 - 10:49 #8
Ingen point til mig...
.o) <-- One Eyed Jack
Avatar billede olebole Juniormester
17. december 2008 - 10:51 #9
*<|:o)
Avatar billede olebole Juniormester
17. december 2008 - 10:51 #10
Ups
Avatar billede roenving Novice
01. januar 2009 - 11:47 #11
Godt nytår -- og et godt tidspunkt til oprydning !-)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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