2011-03-19 26 views
1

我有一個新問題,它必須影響幾乎每個使用AJAX的人。我有一個HTML/JavaScript頁面(使用jQuery調用)將.php加載到我的頁面 - 但它似乎緩存結果,並且通常只返回緩存的信息,而不是重新運行PHP腳本。如何停止正在緩存的jquery php負載的結果

下面的代碼是我如何克服這個問題(感謝bazmegakapa的代碼 - 我只是試圖添加緩存:flase位 - 但它似乎並沒有工作)。

$(document).ready(function() { 
    cache: false 
    $('#selecthere').load('/temp/php_script.php', function() { //callback 
     $('select', this).change(function() { //catch onchange event of select 
      //call your function here, pass the selected value 
      initialize($(this).val()); 
     }); 
    }); 
});` 

回答

1

一個隨機數,只是添加到末尾

var random = Math.random() * 10; 
$('#selecthere').load('/temp/php_script.php?r=' + random, function() { 
+0

是的這是正確的,我一次面對同樣的問題,這就是我解決它的方法。 – 2011-03-19 09:31:09

+0

正是我需要的!謝謝你們。 – 2011-03-19 09:52:02

+0

或者可能是當前時間(以毫秒爲單位),這更可能與緩存值不同。 – 2011-03-19 09:55:37

3

你php_script.php文件應該發送正確的頭,以防止緩存。

<?php 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 
?> 
+0

謝謝你 - 我猜這是正確的做法,所以我要爲它投票,但我已經有效地實施了JohnP的答案,而且它似乎有效,所以我接受了一個。再次感謝! – 2011-03-19 09:51:03

+0

['post-check = 0,pre-check = 0'沒有任何意義](http://blogs.msdn.com/b/ie/archive/2006/06/01/613132.aspx):「 [...]將這兩個值都設置爲0對IE5或IE6絕對沒有影響。「並且」[...]我們已經爲IE7 Beta 3做了修正,即忽略兩個擴展名,如果其中任何一個設置爲零。「 – Gumbo 2011-03-19 09:55:13

0

它看起來像你在做緩存:錯誤的錯誤。

$(document).ready(function() { 
    $.ajax('/temp/php_script.php', 
     { 
      cache: false, 
      success: function(result) { 
       $('#selecthere').html(result); 
      } 
     } 
    ); 
});