即使使用CTRL + F5也无法刷新Ajax缓存

时间:2012-12-16 15:48:45

标签: php ajax caching header

有一段时间我努力寻找一种方法来缓存我的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>

1 个答案:

答案 0 :(得分:0)

你应该使用

header('Cache-Control:must-revalidate');

而不是无意义的

header('Cache-Control:must-revalidation');