2012-12-16 21 views
1

有一段時間我努力找到一種方法來緩存我AJAX的數據被刷新,終於讓我找到一個,但它是一個有點過頭了,看到我的標題......阿賈克斯緩存甚至不能用CTRL + F5

我只使用一個名爲「test.php」的PHP文件,其中包含一些html和jquery。

部分代碼被省略,因爲最重要的部分是三個頭('...')

你不會錯過任何一個,否則AJAX的數據將不會被緩存,但一旦你讓他們所有,ajax的數據不會被即使按Ctrl + 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> 
+0

你的緩存數據將緩存一個小時不管是什麼,除非緩存明確清除。您可以設置某種指示符,例如'&noCache = 1',並在您看到時適當調整。此代碼也受SQL注入,我建議你使用mysqli並參數化你的查詢。 –

+0

謝謝,克里斯托弗。但我不太明白。我不知道何時更新dadabase,我只是希望CTRL + F5可以忽略瀏覽器的緩存。 – huangbeidu

+0

更新數據庫不會使緩存無效。嘗試添加一個隨機的額外參數到您的URL .. EG:?b = 或某些。 – ethrbunny

回答

0

您應該使用

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

,而不是毫無意義的

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