Javascript 当我使用AJAX时,Firefox忽略缓存控制没有存储,没有缓存
在我的网站上,每个页面都可以返回html和json。 若请求为普通,则页面返回html,若请求为AJAX,则页面返回json 问题是当我需要json响应时,firefox会缓存html响应。 在这两种情况下,响应头都没有缓存选项Javascript 当我使用AJAX时,Firefox忽略缓存控制没有存储,没有缓存,javascript,firefox,browser-cache,Javascript,Firefox,Browser Cache,在我的网站上,每个页面都可以返回html和json。 若请求为普通,则页面返回html,若请求为AJAX,则页面返回json 问题是当我需要json响应时,firefox会缓存html响应。 在这两种情况下,响应头都没有缓存选项 Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Connection Keep-Alive Date Sat, 13 Apr 2013 08:31:06
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection Keep-Alive
Date Sat, 13 Apr 2013 08:31:06 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive timeout=5, max=100
Pragma no-cache
以下是我处理AJAX请求的方式:
$.ajax({
url: window.location.href,
dataType: 'json',
//cache: false,
success: function(data) {
// here I get html, (must be json)
// If I set "cache: false" then all is ok
}
});
这个问题出现在firefox中。在镀铬中,一切正常
我想这是因为我正在我现在所在的页面上发送请求。因为如果我更改了例如window.location.href上的url。“?a=1'如果我已经在window.location.href页面上了'?a=1'AJAX按照我的要求返回json。您可以将负责处理AJAX请求的任何文件上的缓存控件设置为无缓存
header('Cache-Control: no-cache, must-revalidate');
或者试试这个:
if($_SERVER['HTTP_ORIGIN'] == "http://example.com")
{
header('Access-Control-Allow-Origin: http://example.com');
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
//your code here
}else{
header('Content-Type: text/html');
echo "<html>";
echo "<head>";
echo " <title>Another Resource</title>";
echo "</head>";
echo "<body>",
"</body>",
"</html>";
}
if($\u服务器['HTTP\u来源]]=”http://example.com")
{
标题('Access-Control-Allow-Origin:http://example.com');
标头('Cache-Control:无缓存,必须重新验证');
页眉(‘到期日期:1997年7月26日星期一05:00:00 GMT’);
标题('Content-type:application/json');
//你的代码在这里
}否则{
标题('Content-Type:text/html');
回声“;
回声“;
呼应“另一种资源”;
回声“;
回音“,
"",
"";
}
为什么不更改URL方案,以便使用不同的URL访问JSON和HTML?例如
/foo.html vs./foo.json
或
/foo?format=html vs./foo?format=json
不要把它看作是Firefox的一种变通方法;您希望尽可能避免降低可缓存性,因为可缓存性高的站点对您的用户执行得更快,并减少您为站点提供服务所需的资源量。它已经是缓存控制:无缓存,必须重新验证。但是它没有帮助,所以我猜您也在将内容类型设置为返回json:header('content-type:application/json');这是很奇怪的行为;Firefox中没有缓存可以正常工作!你有显示这种行为的页面链接吗?我没有链接,它在本地机器上。没关系,没有缓存工作。但是如果页面已经在firefox中打开(就像我的例子),并且您正在该页面上执行AJAX请求,那么响应将从缓存中获取。我同意@allyourcode,最好使用不同的URL获取JSON和HTML。现在,我有了用于json的/foo页面和/foo.json,这一点就是您所描述的没有缓存不工作。这很奇怪,因为我刚刚在本地尝试了你的例子,效果很好。因此,我希望看到一个不起作用的测试用例,这样我就可以调试它并修复任何问题。。。