Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox3在页面加载期间调用ajax时不使用缓存_Javascript_Jquery_Ajax_Firefox_Caching - Fatal编程技术网

Javascript Firefox3在页面加载期间调用ajax时不使用缓存

Javascript Firefox3在页面加载期间调用ajax时不使用缓存,javascript,jquery,ajax,firefox,caching,Javascript,Jquery,Ajax,Firefox,Caching,当使用jQuery加载页面DOM时,我使用ajax获得一些json数据,如下所示: $(document).ready(function(){ getData(); }); function getData(){ $.ajax({cache: true, dataType: 'json', url: '/foo/bar'}); } $(document).ready(function(){ setTimeout("getData()", 1); }); …其

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

$(document).ready(function(){
    getData();
});
function getData(){
    $.ajax({cache: true, dataType: 'json', url: '/foo/bar'});
}
$(document).ready(function(){    
    setTimeout("getData()", 1);
});
…其中getData()是一个简单的jQuery ajax调用,如下所示:

$(document).ready(function(){
    getData();
});
function getData(){
    $.ajax({cache: true, dataType: 'json', url: '/foo/bar'});
}
$(document).ready(function(){    
    setTimeout("getData()", 1);
});
此请求的Expires标头设置为将来某个时间,因此下次加载页面时,ajax调用应该使用缓存的数据。Firefox3没有

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

$(document).ready(function(){
    getData();
});
function getData(){
    $.ajax({cache: true, dataType: 'json', url: '/foo/bar'});
}
$(document).ready(function(){    
    setTimeout("getData()", 1);
});
Firefox尊重Expires头,并使用缓存。你知道为什么会这样吗

提到浏览器处理页面加载时发生的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
  • 接受application/json、text/javascript、/
  • 接受我们的语言,嗯;q=0.5
  • 接受编码gzip,放气
  • 接受字符集ISO-8859-1、utf-8;q=0.7,*;q=0.7
  • 活命
  • 连接保持活动状态
  • X-request-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到期
  • 内容类型text/javascript
  • 缓存控制公用
  • 连接关闭

在$.ajax()调用中定义一个错误处理程序,并检查响应头(使用jqXHR.getAllResponseHeaders(),其中jqXHR是jQuery ajax对象、状态代码和responseText.length。您可能会发现请求成功,但jQuery将其视为不成功。我最近在缓存文件和$.ajax()方面遇到了类似的问题,并且有时在浏览器脱机或从本地文件加载文件时,返回状态代码0。因为状态不在成功代码范围内(200-300)jQuery认为请求失败了。请看我做了什么来修复这个问题。基本上,在您的错误处理程序中,可以检查响应集长度。如果它是非空的,请考虑请求成功并使用JSON.PARSE()解析JSON。.但是!!!您必须确保服务器端的无效请求是空的。

链接页面说明了其他内容。您可以尝试使用livehhtpheaders或firebug之类的工具检查调用的http请求/响应头吗?比较缓存的调用和非缓存的调用。您可能希望生成日志使用并查看它的外观…
cache:true
。实际上,它什么都不做。