【问题标题】:IE caching ajax request does not execute javascript functionIE缓存ajax请求不执行javascript函数
【发布时间】:2013-04-08 06:48:29
【问题描述】:

我在客户端上通过 jQuery.getScript 加载了一个 javascript 文件,并且我在服务器端设置了缓存控制标头和 1 小时浏览器缓存。看起来 IE 缓存了 ajax 请求,并且文件中存在的函数不在 IE 中执行。在 getScript 调用中设置 false 是否会覆盖从服务器端设置的 1hr 的缓存控制标头?

var jsCache = true;
    if($.browser.msie){
        jsCache = false;
    }
        if(!initialized){

            $.getScript('thatjsfileurl', function() { 
             $("#welcome").pluginInit({
                start:'newPage'
             });  
             initialized = true;
            },jsCache);
        }

注意:这里还有Akamai,所以不能在servlet端设置浏览器检测代码。

【问题讨论】:

    标签: jquery ajax internet-explorer caching browser


    【解决方案1】:

    根据jQuery doc for getScriptgetScript() 调用没有缓存设置参数,因此您没有对 jsCache 变量做任何事情。

    您可以在 URL 中添加时间戳编号并绕过任何 IE 缓存。

        if(!initialized) {
            $.getScript("thatjsfileurl" + "?now=" + new Date().getTime(), function() { 
                $("#welcome").pluginInit({
                   start:'newPage'
                });  
                initialized = true;
            });
        }
    

    【讨论】:

      【解决方案2】:

      通过测试我发布的上述代码,我自己想出了答案。当我们将变量缓存设置为 false 时,浏览器会覆盖服务器端标头变量,例如 cache-control: 1hr 等。当缓存设置为 false 时,IE 浏览器每次从服务器获取新副本。

      var jsCache = true;
          if($.browser.msie){
              jsCache = false;
          }
              if(!initialized){
      
                  $.getScript('thatjsfileurl', function() { 
                   $("#welcome").pluginInit({
                      start:'newPage'
                   });  
                   initialized = true;
                  },jsCache);
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-13
        • 2018-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-21
        • 2015-01-06
        相关资源
        最近更新 更多