Page 1 of 1

Internet Explorer Caching Using Ajax

Posted: Sat Feb 28, 2009 9:19 am
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>
 
 
 

Re: Internet Explorer Caching Using Ajax

Posted: Sat Feb 28, 2009 9:30 am
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);

Re: Internet Explorer Caching Using Ajax

Posted: Sat Feb 28, 2009 9:40 am
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?

Re: Internet Explorer Caching Using Ajax

Posted: Mon Mar 02, 2009 2:04 pm
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");