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>
你的緩存數據將緩存一個小時不管是什麼,除非緩存明確清除。您可以設置某種指示符,例如'&noCache = 1',並在您看到時適當調整。此代碼也受SQL注入,我建議你使用mysqli並參數化你的查詢。 –
謝謝,克里斯托弗。但我不太明白。我不知道何時更新dadabase,我只是希望CTRL + F5可以忽略瀏覽器的緩存。 – huangbeidu
更新數據庫不會使緩存無效。嘗試添加一個隨機的額外參數到您的URL .. EG:?b =或某些。 –
ethrbunny