浏览器中的Ajax缓存问题?

时间:2015-01-05 07:12:50

标签: javascript jquery ajax internet-explorer caching

我的JavaScript功能如下:

function getActivityDiscussed(str,id)
{
            var xmlhttp;    
            if (str=="")
            {
              document.getElementById("list_bottom").innerHTML="";
              return;
            }
            if (window.XMLHttpRequest)
            {// code for IE7+, Firefox, Chrome, Opera, Safari
              xmlhttp=new XMLHttpRequest();
            }
            else
            {// code for IE6, IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function()
            {
              if (xmlhttp.readyState==4 && xmlhttp.status==200)
              {
                document.getElementById("list_bottom"+id).innerHTML=xmlhttp.responseText;
              }
            }
            xmlhttp.open("GET","<?php echo base_url($client_url.'communications/getActivityDiscussed'); ?>/"+str,true);
            xmlhttp.setRequestHeader("Cache-Control", "no-cache");
            xmlhttp.setRequestHeader("Pragma", "no-cache");
            xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
            xmlhttp.send();
 }

此ajax调用在IE-9中无效。

我已使用以下代码清除了缓存:

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

但我必须为每个ajax请求使用这些代码。

有没有办法全局禁用缓存?

先谢谢

2 个答案:

答案 0 :(得分:0)

您可能需要为每个解决此问题的请求添加一些随机数或字符串。

检查此链接..会有所帮助。 Prevent browser caching of jQuery AJAX call result

答案 1 :(得分:0)

据我所知,JavaScript中没有这样的机制。您必须定期重复它,否则您可以在函数中使用这些代码并调用您想要的函数。

function clearBrowserCacheForAjax()
{
   xmlhttp.setRequestHeader("Cache-Control", "no-cache");
   xmlhttp.setRequestHeader("Pragma", "no-cache");
   xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
}

在每个功能中,您可以调用上述功能。

function getActivityDiscussed(str,id)
{
            var xmlhttp;    
            if (str=="")
            {
              document.getElementById("list_bottom").innerHTML="";
              return;
            }
            if (window.XMLHttpRequest)
            {// code for IE7+, Firefox, Chrome, Opera, Safari
              xmlhttp=new XMLHttpRequest();
            }
            else
            {// code for IE6, IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function()
            {
              if (xmlhttp.readyState==4 && xmlhttp.status==200)
              {
                document.getElementById("list_bottom"+id).innerHTML=xmlhttp.responseText;
              }
            }
            xmlhttp.open("GET","<?php echo base_url($client_url.'communications/getActivityDiscussed'); ?>/"+str,true);
            clearBrowserCacheForAjax();
            xmlhttp.send();
 }