Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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 当我使用AJAX时,Firefox忽略缓存控制没有存储,没有缓存_Javascript_Firefox_Browser Cache - Fatal编程技术网

Javascript 当我使用AJAX时,Firefox忽略缓存控制没有存储,没有缓存

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

在我的网站上,每个页面都可以返回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 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,这一点就是您所描述的没有缓存不工作。这很奇怪,因为我刚刚在本地尝试了你的例子,效果很好。因此,我希望看到一个不起作用的测试用例,这样我就可以调试它并修复任何问题。。。