JQuery ajax加载器和浏览器缓存

4
我正在使用JQuery通过ajax动态加载一些数据。每当用户发起ajax请求(例如单击按钮或加载页面等),我都会显示ajax加载器gif。一旦ajax请求完成(或出错),我就隐藏加载器图像。
大多数情况下,这很好用。但是我注意到(例如在IE7中),在页面加载时发送的ajax调用会被缓存(我认为是这样)。因此,当我刷新页面并且假定触发了ajax调用时,IE将加载缓存的数据。结果,jquery.ajax()函数中的成功(或错误)回调永远不会被调用,并且加载器图像将无限期地停留在那里。有什么最好的方法解决这个问题?

1
“...ajax调用可能已经触发...”我建议您在Firefox上使用带有Firebug的浏览器尝试此操作。这将更清楚地了解正在发生的情况。此外,如果您使用RESTful URL执行GET而不是POST(不会被缓存),则可能会遇到返回缓存值的问题。 - Ajaxe
我在Firefox中没有看到相同的结果。我只能在IE中重现这个问题。是否有类似于Firebug的东西可以用于IE? - aeq
3个回答

3
如果您想在整个网站上禁用ajax结果缓存,请使用.ajaxSetup()
$.ajaxSetup( { cache : false } );

您可以通过以下方式逐个覆盖行为:

$.ajax ({ 
...
cache: true,
...

2

.ajax() 提供了 cache 属性,默认为 true

$.ajax({
   ...
   cache:  false
});

作为另一种选择,您可以在请求查询字符串中添加一个随机数。 http://api.jquery.com/jQuery.ajax/
$.ajax({
   url:   '/path/script.pl',
   dataType: 'text',
   type: 'GET',
   data: {
     q:   ~~(Math.random()*200)
   },
   success: function(data){
      // data
   }
});

0

jQuery.ajax 实际上有一个内置选项可以避免这种情况:

$.ajax( { cache : false } );

文档已包含在ajax方法中:jQuery.ajax()

来自文档:

cache
默认值:true,对于dataType 'script'和'jsonp'为false
如果设置为false,则会强制请求的页面不被浏览器缓存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接