Ajax.Updater og IE Cache

Apr 20, 2007

Her sidder jeg så, helt alene en fredag eftermiddag på arbejdspladsen og døjer med AJAX ... hold da kæft en nørd jeg er blevet : --- Nå, men jeg har faktisk fundet ud af noget idag, og det vil jeg lige dele med jer.

Problemet ligger i Prototypes Ajax.Updater funktion, mere specifikt er det AJAX.Updater og Internet Explorers cache. Løsningen skulle vise sig at være noget så simpel.

Ajax.Updater

Ajax.Updater er en funktion i Prototypes framework, som hurtigt og nemt lader dig updaterer et valgt div-tag med en valgt fil, metodekaldet se ud som følgende:
new Ajax.Updater(myDivTag, /some_url,
{ method: get }
);
Funktionen er en forenkling af deres Ajax.Request funktion, i hvilket du ofte vil definerer ekstra funktion til at hånderer responset. Ajax.Updater gør det hele for dig, opretter et requets til filen (anden parameter) og placerer responset i dit div-tag (første parameter) - Det var i hvert fald meningen.

Internet Explorer super cache?!

Af en eller anden grund, som jeg ikke har undersøgt nærmere, lader IE 7.0 til at have en super cache. Jeg brugte Updater-funktionen til at hente en fil, som genererede en drop-down box ud fra et database kald. Når jeg opdaterede databasen (tilføjede til drop-down boxen) kunn IE ikke opfatte at der var foretaget ændringer? I hvertfald ikke når jeg bare kaldte filen uden parametre.

Ajax.Updater cache løsning

Løsningen er utrolig simpel. Du skal ganske simpelt tilføje en (ekstra) mere eller mindre tilfældig (i hvertfald ligegyldig) parameter til dit kald - vær dog sikker på at denne ikke skal bruges i dit kald.

Jeg havde en funktion der så ud som følgende:

function reloadFile(fileName, divID, pars) {
    new Ajax.Updater(divID, fileName,{
        method: get, parameters: pars
    });
}
Denne funktion kom til at se ud som følgende, og alt var nu godt i IE:
function reloadFile(fileName, divID, pars) {
    pars = pars+&cacheFix=+Math.random();
    new Ajax.Updater(divID, fileName, {
        method: get, parameters: pars
    });
}
Ved at bruge Math.random() er du mere eller mindre sikker på at dit fil-kald er forskelligt fra gang til gang - hvilket åbenbart er hvad der skal til, før IE fatter AJAX?! Meget simpelt, men en fantastik lettelse for mig, da jeg fandt ud af det =;)

Comments

comments powered by Disqus