Internet Explorer Caching Using Ajax

JavaScript and client side scripting.

Moderator: General Moderators

Post Reply
millsy007
Forum Commoner
Posts: 78
Joined: Wed Jul 02, 2008 7:00 pm

Internet Explorer Caching Using Ajax

Post by millsy007 »

Hi, I know this is a fairly common issue, and I have tried a number of methods (adding a random number to the GET, changing the GET to POST etc.) But I still get the same issue of internet explorer working with an old recordset that the user has since updated on my page.

What happens is the user inserts a record (into my coach booking form) but when the user clicks to show the schedule the changes are not reflected in internet explorer, how can I force my function to work with the latest set of data?

The floowing is the function that is used to show the latest schedule:

Code: Select all

<script  type="text/javascript">
<!-- 
//Browser Support Code
function GetSchedule(){
    var ajaxRequest;  // The variable that makes Ajax possible!
    
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var ajaxDisplay = document.getElementById('ajaxDiv');
            ajaxDisplay.innerHTML = ajaxRequest.responseText;
        }
    }
    var date = document.getElementById('date').value;
    var time = document.getElementById('time').value;
//  var queryString = "?date=" + date + "&time=" + time;
//  
//  ajaxRequest.open("GET", "getschedule.php" + queryString,+'&nocache = '+nocache true);
//  ajaxRequest.send(null); 
    
    
    var date = document.getElementById('date').value;
    var time = document.getElementById('time').value;
    var queryString = "?date=" + date + "&time=" + time;
    ajaxRequest.open("GET", "getschedule.php" + queryString, true);
    ajaxRequest.send(null); 
    
}
 
//-->
</script>
 
 
 
User avatar
kaszu
Forum Regular
Posts: 749
Joined: Wed Jul 19, 2006 7:29 am

Re: Internet Explorer Caching Using Ajax

Post by kaszu »

Random number should do the trick, don't know why it doesn't work for you :?

Code: Select all

var queryString = "?date=" + date + "&time=" + time + '&r= (new Date()).getTime() + Math.round(Math.random() * 10000);
millsy007
Forum Commoner
Posts: 78
Joined: Wed Jul 02, 2008 7:00 pm

Re: Internet Explorer Caching Using Ajax

Post by millsy007 »

I do:

Code: Select all

var date = document.getElementById('date').value;
    var time = document.getElementById('time').value;
    var queryString = "?date=" + date + "&time=" + time + '&r= (new Date()).getTime() + Math.round(Math.random() * 10000)';
    ajaxRequest.open("GET", "getschedule.php" + queryString, true);
    ajaxRequest.send(null);
Still works in firefox, but still not updating in IE?
mickeyunderscore
Forum Contributor
Posts: 129
Joined: Sat Jan 31, 2009 9:00 am
Location: UK

Re: Internet Explorer Caching Using Ajax

Post by mickeyunderscore »

If random numbers don't work then send a cache control header with your request, like so:

Code: Select all

ajaxRequest.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
ajaxRequest.setRequestHeader("Cache-Control", "no-cache");
Post Reply