【问题标题】:Firefox 3 not using cache when ajax call made during page load在页面加载期间进行 ajax 调用时,Firefox 3 不使用缓存
【发布时间】:2011-08-17 05:43:22
【问题描述】:

当使用 jQuery 加载页面 DOM 时,我使用 ajax 获取一些 json 数据,如下所示:

$(document).ready(function(){
    getData();
});

...其中 getData() 是一个简单的 jQuery ajax 调用,如下所示:

function getData(){
    $.ajax({cache: true, dataType: 'json', url: '/foo/bar'});
}

此请求的 Expires 标头设置为将来的某个时间,因此下次加载页面时,ajax 调用应该使用缓存的数据。 Firefox 3 没有。

但是,如果我要求这样的数据:

$(document).ready(function(){    
    setTimeout("getData()", 1);
});

Firefox 确实 尊重 Expires 标头,并使用缓存。任何想法为什么会这样?

This page 提到浏览器可能会将页面加载时发生的 ajax 调用与响应用户 UI 事件时发生的 ajax 调用区别对待。

编辑:我忘记在我的原始帖子中包含 http 标头。我认为标头很好,因为只要在页面加载时没有在 ajax 调用中发出请求,缓存就会起作用。如果我访问 ajax 调用在我的浏览器 URL 栏中使用的 url,缓存会起作用,正如我在上面解释的那样,如果我给 ajax 调用添加一点延迟,缓存就会起作用。

请求标头

  • 主机 10.0.45.64:5004
  • 用户代理 Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:1.9.2.9)Gecko/20100824 Firefox/3.6.9
  • 接受应用程序/json、文本/javascript、/
  • Accept-Language en-us,en;q=0.5
  • 接受编码 gzip、放气
  • 接受字符集 ISO-8859-1,utf-8;q=0.7,*;q=0.7
  • 保活 115
  • 连接保持活动
  • X-Requested-With XMLHttpRequest
  • 饼干

响应标头

我将 Expires 标头设置为未来 1 周,这样用户每周只需要刷新一次。

  • 日期 2011 年 5 月 4 日星期三 15:32:04 GMT
  • 上次修改时间 2011 年 5 月 4 日星期三 15:32:03 GMT
  • 将于 2011 年 5 月 11 日星期三 15:32:03 GMT 到期
  • 内容类型文本/javascript
  • 公共缓存控制
  • 连接关闭

【问题讨论】:

  • 链接页面谈论的不是这个。您可以尝试使用 livehhtpheaders 或 firebug 之类的东西检查调用的 http 请求/响应标头吗?将缓存的调用与未缓存的调用进行比较。
  • 您可能想使用developer.mozilla.org/en/HTTP_Logging 生成日志并查看它的样子...
  • cache:truedoesn't do what you think it does。事实上,它什么也没做。

标签: javascript jquery ajax firefox caching


【解决方案1】:

在 $.ajax() 调用中定义一个错误处理程序并检查响应标头(使用 jqXHR.getAllResponseHeaders(),其中 jqXHR 是 jQuery Ajax 对象、状态代码和 responseText.length。您可能会发现请求是成功,但 jQuery 将它们视为不成功。我最近在缓存文件和 $.ajax() 方面遇到了类似的问题,事实证明,有时在浏览器离线或从本地文件加载文件时,会返回状态代码 0。因为状态不在成功代码 (200-300) 的范围内,所以 jQuery 认为请求失败。请参阅 this 了解我为解决此问题所做的工作。基本上,在您的错误处理程序,您可以检查 responseText.length。如果它不为空,则认为请求成功并使用 JSON.parse() 解析 JSON。但是!!!您必须确保在服务器端存在无效请求是空的。

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多