有一段时间我努力寻找一种方法来缓存我的ajax数据,最后我发现了一个但是有点太过分了,看看我的标题......
我只使用一个名为“test.php”的PHP文件,其中包含一些html和jquery。
省略了一些代码,因为最重要的部分是三个标题('...')。
你不能错过任何一个,否则ajax数据不会被缓存,但是一旦你得到它们,即使用 Ctrl + F5,也不会刷新ajax数据< / kbd>除非清除浏览器的缓存。
我不想失去缓存的好处,但是当数据库更新时,ajax请求仍然得到304(NOT MODIFIED)。至少在 Ctrl + F5 之后,让我收到200回复(好)。
<?php
...
$test = $_GET['test'];
$query = "select * from `xx` where id = '$test'";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)){
$str .= $row['name'];
}
//I want ajax data to be cached for only one hour
$cache_time = gmdate('D, d M Y H:i:s',strtotime('+1 hour')).' GMT';
header('Cache-Control:must-revalidation');
header('Expires:'.$cache_time);
header('Pragma:cache');
exit($str);
?>
<!DOCTYPE HTML>
<html>
<body>
...
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(function(){
$('li').live('click',function(){
$.ajax({
type:"GET",
data:'test=' + test,
dataType:"text",
url:"test.php",
success:function(text){
alert(text);
}
});
});
});
</script>
</body>
</html>
答案 0 :(得分:0)
你应该使用
header('Cache-Control:must-revalidate');
而不是无意义的
header('Cache-Control:must-revalidation');