如何防止jQuery Ajax缓存?

时间:2010-06-09 00:46:10

标签: jquery ajax caching

有人可以帮我这个吗?我有一个使用.manifest进行离线存储缓存的网页。在该页面中,我使用jQuery ajax调用从服务器获取数据。如果我先加载页面,就可以了。我可以在在线和离线之间切换。但问题是当我重新上线并刷新页面时。 jQuery ajax无法再与服务器通信了。有没有办法让ajax与服务器通信或清除脱机缓存?

我的ajax电话是这样的:

        $.ajax({

            type: "GET",

            url: requestUrl,
            success: localSuccess,

            error: error,

            dataType: "text",
            cache:false
        });

3 个答案:

答案 0 :(得分:5)

我在每页/主页的顶部都有这段代码

    //Disable caching in IE, becuase it's EVIL!
    $(document).ready(function () {
        $.ajaxSetup({ cache: false });
    });

答案 1 :(得分:0)

将随机字符串放入url中,例如“get.php?random =”+ Math.random()“可以解决这个问题。这不是最好的解决方案,但效果很好。

答案 2 :(得分:0)

我知道我参加这个派对的时间非常晚,但只是把它放在那里。我很抱歉从僵尸的土地上复活这个问题。 在safari和一些较旧的浏览器中,(从我迄今为止经历过的,cache:false似乎有时不起作用)。对于更多跨浏览器兼容的解决方案,您可以向ajax()调用添加数据选项,并添加随机数生成器作为参数。它会是这样的。

 var callback = function () {
   $.ajax({
      type: "GET",
      url: requestUrl,
      success: localSuccess,
      error: error,
      dataType: "text",

      //won't work sometimes
      cache:false,

      //start random number generator
      data : { r: Math.random() }
     //end random number generator
   });
  }

这样,每次发生服务器调用时,都会生成一个新的随机数,由于数据与先前的请求不同,因此ajax请求不会被缓存,并且每次都会确保新的服务器调用。在您的服务器中,您可以忽略此变量r