Webprogrammør

Simon Jensen

Bloggen med evigt skiftende tema!


 2

Ajax.Updater og IE Cache

20. April 2007, Kl. 17:52:05 af Simon Jensen

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 =;)


Amen.

Efter at have brugt riiigtig lang tid på undre mig over det her problem, gav jeg op og googlede "Ajax.Updater IE 6"...

Du reddede min dag.

Takker.

Få dit eget gravatar hos www.gravatar.com Casper

Puhaaa - jeg kender det, tro mig! Jeg var også ved at opgive alt før jeg faldt over denne løsning.


Skriv en kommentar






AddThis Social Bookmark Button


aalborg add on ajax akismet algoritme analyse apache arbejde automatix backup bad gastein beryl billeder blog bot brows browser business buzz cache chat cloaking cms color schemer colorpix compiz fusion crazy eggs css css zengarden design desktop applet deviantart editor error falken productions farver fckeditor feed feedburner ferie firebug firefox flash flickr fokus foto gadget galleri gettext gnome gnu goat google google maps gps gracefull degredation grafik gravatar hijax hotel htaccess html ie IM install instereo intaller internet explorer internet explorer 6.0 investering ipod it itunes java javascript karneval kunst linux live search livecd meta microsoft mobil mod_rewrite mootools mozbackup mozilla msn musik mysql news omgivelser one.com ooxml opera os php pidgin ping pipes png podcast printer programmering projekt prototype qfilm reklame reklamebureau rss screenshot script script.aculo.us seo skole songbird spam sponser standard standarder statistik strand svn test thunderbird tillykke tivoli top 10 twitter ubuntu udvikling validering video vinter vista w3c wallpaper web 2.0 web design web programmering webcrawler webserver windows wordpress xhtml xml xmlrpc xp yahoo youtube