2

しばらくの間、自分の ajax データをキャッシュする方法を見つけようと懸命に努力しましたが、ついに見つけましたが、少し遠すぎます。私のタイトルを参照してください...

「test.php」という名前の PHP ファイルを 1 つだけ使用し、その中にいくつかの html と jquery を使用します。

最も重要な部分は 3 つのheader('...')であるため、一部のコードは省略されています。

そうしないと ajax データはキャッシュされませんが、それらをすべて取得すると、ブラウザーのキャッシュをクリアしない限り、 Ctrl+を指定しても ajax データはフラッシュされません。F5

キャッシュの利点を失いたくはありませんが、データベースが更新された ajax リクエストで 304(NOT MODIFIED) が返されます。少なくとも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