【发布时间】: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