gpt4 book ai didi

javascript - Firefox 3 在页面加载期间进行 ajax 调用时不使用缓存

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:47:11 24 4
gpt4 key购买 nike

当使用 jQuery 加载页面 DOM 时,我通过 ajax 获得了一些 json 数据:

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

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

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

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

但是,如果我改为这样请求数据:

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

Firefox 确实尊重 Expires header ,并使用缓存。知道为什么会这样吗?

This page提到浏览器可能会以不同于响应用户 UI 事件时发生的 ajax 调用来处理页面加载时发生的 ajax 调用。

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

请求 header

  • 主机 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
  • 接受application/json, text/javascript, /
  • 接受语言 en-us,en;q=0.5
  • 接受编码 gzip,deflate
  • 接受字符集 ISO-8859-1,utf-8;q=0.7,*;q=0.7
  • 保持事件状态 115
  • 保持连接
  • X-Requested-With XMLHttpRequest
  • cookies

响应头

我将 Expires header 设置为 future 1 周,这样用户每周只需刷新一次。

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

最佳答案

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

关于javascript - Firefox 3 在页面加载期间进行 ajax 调用时不使用缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5861842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com