在我的网站中,每个页面都可以返回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中。在chrome中一切都很好
我认为是因为我正在我现在找到的页面上发送请求。因为如果我在window.location.href上更改url。 '?a = 1',如果我已经在页面window.location.href。 '?a = 1'AJAX返回json我想要的。
答案 0 :(得分:1)
您可以将缓存控制设置为无需缓存处理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>";
}
答案 1 :(得分:1)
为什么不更改URL方案以便使用不同的URL访问JSON和HTML? E.g。
/foo.html vs. /foo.json
或
/ foo?format = html vs. / foo?format = json
不要认为它是Firefox的解决方法;您希望尽可能避免降低可缓存性,因为高度可缓存的网站对您的用户执行速度更快,并减少了为您的网站提供服务所需的资源量。