【问题标题】:jQuery ajax caching: false works only in firefoxjQuery ajax 缓存:false 仅在 firefox 中有效
【发布时间】:2011-03-19 09:26:48
【问题描述】:

我开发了一个简单的叠加层来以全尺寸预览图像。

我使用“cache: false”来防止缓存。

代码很简单:

$.ajax({
   url: urlFull,
   cache: false,
   success: function(html){
      // display image
   },
   error: function(XMLHttpRequest, textStatus, errorThrown ) {
      // display error
   }
});

问题是 - 当图像文件将被另一个替换时,浏览器将始终显示旧文件,无论是否设置了“缓存:false”选项。

此问题出现在 Safari 5.0 (6533.16) 和 Chrome 5.0.375.99 下。

在 Firefox 3.6.3 中,它按预期工作(无缓存)

我无法控制服务器端逻辑,因为我预加载了一个常规文件,而没有在 rails 中调用控制器操作。

这个问题有什么解决方法吗?也许,我可以用 Rails 服务器拦截响应并调整一些标题? ...我在 localhost 下开发。

谢谢。

【问题讨论】:

    标签: ruby-on-rails caching jquery cross-browser


    【解决方案1】:

    作为“肮脏”的解决方案,请尝试在 URL GET 参数中添加时间戳。

    【讨论】:

    • +1 - 这不是一个肮脏的解决方案,它是我所知道的唯一适用于所有浏览器的方法。现在,如果您愿意使用POST 而不是GET,那么这也会阻止缓存。
    • 我没有在文档中找到时间戳。我该如何设置它?
    • 只需在您的 URL 中添加一个新的 GET 参数:url += "&avoidCache=" + (new Date()).getTime()
    【解决方案2】:

    我尝试过使用

    data: { timestamp: new Date().getTime() }.
    

    它不起作用。

    在 Safari 的开发者面板中,我发现请求字符串如下所示:

    http://path_to_the_image.png?_=1279789134612”。

    我已经添加了“_”参数:

    data: {_: new Date().getTime()}
    

    并获得以下网址:

    http://path_to_the_image.png?=1279789134612&=1279789245466”。

    另外,我尝试使用“timestamp”、“tstamp”、“t”;设置“0”、“9999999999999”……都没有结果……

    好像我无法控制时间戳,内部设置在 $.ajax ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多