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

时间:2011-05-02 19:56:28

标签: javascript jquery ajax firefox caching

当使用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提到浏览器可能会处理当页面加载与响应用户UI事件时发生的ajax调用不同时发生的ajax调用。

修改:我忘了在原帖中加入http标题。我认为标题很好,因为只要在页面加载时没有在ajax调用中发出请求,缓存就会起作用。如果我访问ajax调用在我的浏览器URL栏中使用的URL,则缓存有效,并且如上所述,如果我向ajax调用添加一点延迟,则缓存可以正常工作。

请求标头

  • 主持人10.0.45.64:5004
  • User-Agent 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, /
  • Accept-Language en-us,en; q = 0.5
  • 接受编码gzip,deflate
  • Accept-Charset ISO-8859-1,utf-8; q = 0.7,*; q = 0.7
  • Keep-Alive 115
  • 连接保持活着
  • X-Requested-With XMLHttpRequest
  • Cookie

响应标头

我将Expires标头设置为1周,以便用户每周只需刷新一次。

  • Date Wed,04 May 2011 15:32:04 GMT
  • Last-Modified Wed,04 May 2011 15:32:03 GMT
  • 2011年5月11日星期三15:32:03 GMT
  • 内容类型文字/ javascript
  • Cache-Control Public
  • 连接关闭

1 个答案:

答案 0 :(得分:0)

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