From the Archives: Ajax IE Caching Issue – Recap
Author’s Note: Here is another article from my long lost blog. Ajaxian still links in here, as well as many other personal blogs. See my previous post for background.
-David
Post: In light of the comments on the original post, i thought it would be nice to reiterate some other people’s workarounds.
This was the first one brought to my attention, and actually is how i work around the caching these days. Basically, you add a superfluous variable to your string of GET vars that is unique – timestamp works fine. I actually go a little bit further and use milliseconds since the app i’m working on makes several requests per second.
servlet/imagemaker.jsp?foo=bar&goo=carChange to:
servlet/imagemaker.jsp?foo=bar&goo=car&time=111111111Here is function to uncache the url:
function uncache(url){
var d = new Date();
var time = d.getTime();
return url + ‘&time=’+time;
}
This workaround looks like as close to a valid solution as there is. It simply adds an arbitrary variable to the POST vars (sent in the send method).
http.open(’post’, ‘myfile.php’);
http.setRequestHeader(’Content-Type’, ‘application/x-www-form-urlencoded’);
http.onreadystatechange = handleResponse;
http.send(’var=1′);
A null or empty string for the send method will cause IE to cache.
My only recommendation for that second solution would be to change the POST var to send(’ie=teh_suck’);
Kudos to contributors. Comment Thread:
- Sujai Said…
- What about xml files. I am trying to call xml using ajax. I tried POST its not working
- September 14th, 2006 at 11:57 pm
- Steve Said…
- Thanks for this, I had already spent far too long trying to work out why ie was caching the records (thought it may have been a bug in ie7). For those that are interested below is a script i used the above suggestion with, it uses a php loop to change the field which it will output the fetched data to.
cheers
function getContent(){ var page='./query.php'; var selected=document.getElementById('selected').value; if (selected==''){selected='none';} //params has to have following format //i.e.: c=1&id=3…. //Clear our fetching variable var xmlhttp=false; //Try to create active x object try { xmlhttp = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest!='undefined') { alert('Error'); } var rowNum=''; xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState==4 && xmlhttp.status== 200) { document.getElementById('qty').innerHTML = xmlhttp.responseText; } } params='selected='+ selected +'&rownum='+ rowNum +'&rnd='+ Math.random()*99999; xmlhttp.open('POST', ‘./query.php', false); xmlhttp.setRequestHeader('Content-type', ‘application/x-www-form-urlencoded'); xmlhttp.send(params); }- October 25th, 2006 at 6:56 pm
- Chris Said…
- Glad I have found this article, bookmarking for work =D
We plan on doing an entirely new website (hopefully I can get them to separate html/css/back-end) this time around as well as get some ajax in there to make life a bit easier!
- November 14th, 2006 at 7:41 pm
- Mark Said…
- Excellent. Thanks for this.
Been banging our heads against the proverbial Brick 2.0 Walls trying to work out why our Ajax looping updates don’t update in IE7.
- December 13th, 2006 at 1:42 pm
- Gareth Said…
- That worked a treat.
I’m still a bit annoyed that I have to do this for every request. Such is the life we lead.
- December 18th, 2006 at 3:43 pm
- Gene Said…
- Wow, thank you VERY much. I’ve been having this problem for some time now. This little line “req.send(’var=1′);” really helped me out. Thanks VERY VERY much.
- December 20th, 2006 at 6:56 pm