【问题标题】:Ajax cachhing issue in Browser?浏览器中的 Ajax 缓存问题?
【发布时间】:2015-03-02 17:14:55
【问题描述】:

我的 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 请求使用这些代码。

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

提前致谢

【问题讨论】:

    标签: javascript jquery ajax internet-explorer caching


    【解决方案1】:

    据我所知,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();
     }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我认为您的解决方案不是最好的,因为如果用户发送多个 ajax 请求,那么它将填满浏览器缓存。我有解决方案,但我想设置一些全局配置,以免代码重复。
      • 你试过在 jquery 中使用 cache: false 吗?

        您必须包含您尝试过的方法,而这些方法不是我们想要的。
      • 您是否正确浏览了我的代码?在回答之前仔细阅读问题,如果有任何疑问再次提出问题,我会澄清。
      • 您可以将调用从 GET 更改为 POST。 POST by design 不会被缓存。但是如果你必须使用 GET,那么在查询字符串中添加当前日期时间戳是最好的解决方案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 2012-11-25
      • 2011-08-22
      • 2011-10-14
      • 2011-08-18
      • 1970-01-01
      相关资源
      最近更新 更多