2

一段时间以来,我一直在努力寻找一种方法来缓存我的 ajax 数据,最后我找到了,但它有点太远了,请参阅我的标题...

我只使用一个名为“test.php”的 PHP 文件,其中包含一些 html 和 jquery。

省略了一些代码,因为最重要的部分是那三个header('...')

你不能错过任何一个,否则ajax数据将不会被缓存,但是一旦你得到它们,即使使用Ctrl+也不会刷新ajax数据,F5除非清除浏览器的缓存。

我不想失去缓存的好处,但是当数据库更新 ajax 请求仍然得到 304(未修改)。至少在Ctrl+之后F5,让我得到 200(OK)的响应。

<?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>
4

1 回答 1

0

你应该使用

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

而不是毫无意义

header('Cache-Control:must-revalidation');
于 2013-08-07T11:00:28.350 回答