2011-09-05 36 views
0

必須有某種我的服務器上的服務器端緩存的...數據請求總是相同

當我使用jQuery AJAX請求內容每當我得到同樣的數據,即使我更換服務器

  • 的SuSE Linux
  • Apache服務器
  • :與

    echo('hello, world!'); 
    

    使用的配置端代碼3210

  • PHP 5

什麼樣的緩存可以被激活?

正如你所看到的,我已經實現了兩個代碼來防止瀏覽器在下面的javascript緩存中。問題肯定在服務器端。

只爲信息:

客戶端代碼:

// Add a timestamp to url to prevent browser from caching ajax content 
var date = new Date(); 
var timestamp = date.getTime(); 
var nocache = '&nocache=' + timestamp; 

// Ajax call: get entries, add to entries div 
$.ajax({ 
    type: "POST", 
    url: "jsfeed.php", 
    //data: "lastmsg="+ ID, 
    data: "<?php echo("key=$api_key&fc=$collection_ident&offset="); ?>" + (ID+1) + "<?php echo("&showmax=$showmax&nocontainer" . $jstaggedonly); ?>" + nocache, 
    cache: false, 
    success: function(html) { 
     $("div#updates").append(html); 
     $("#more"+ID).remove(); 
    } 
}); 

服務器端代碼:

if(isSet($_POST['offset']) && isSet($_POST['showmax'])) 
{ 
    $offset = $_POST['offset']; 
    $showmax = $_POST['showmax']; 
    $new_offset = $offset + $showmax; 

    $call = $api_url . 'jsfeed.php?' . $_SERVER['QUERY_STRING']; 

    $html = file_get_contents($call); 
    echo($html); 
    // ... 
} 

編輯:

如果你想爲have a look - 我正在測試的網頁(限時在線)...在更新列表下搜索「顯示更多」按鈕。這是觸發ajax調用的地方。

編輯:

我解決了這個。我的腳本中有一個錯誤。沒有必要手動追加時間戳,就像我上面做的那樣。 jQuery選項cache: false就夠了。所以,它只是看起來像這樣:

// Ajax call: get entries, add to entries div 
$.ajax({ 
    type: "POST", 
    url: "jsfeed.php", 
    data: "<?php echo("key=$api_key&fc=$collection_ident&offset="); ?>" + (ID+1) + "<?php echo("&showmax=$showmax&nocontainer" . $jstaggedonly); ?>", 
    cache: false, 
    success: function(html) { 
     $("div#updates").append(html); 
     $("#more"+ID).remove(); 
    } 
}); 
+0

一個非常簡單的測試就是用''jsfeed.php?'替換''jsfeed.php'''。 + Math.random()'...確實會禁用任何緩存。如果它仍在發生,請確保您實際上是從您認爲正在請求的文件請求。 – Andreas

+0

剛剛測試過這個,但我仍然得到相同的記錄。我剛剛在上面添加了一個鏈接,您可以在其中看到它。尋找「顯示更多」按鈕。我只是試圖得到回聲('你好!');不幸的是沒有運氣 –

+0

我現在檢查了,我沒有看到「你好!「,你是否改回來了?但是,如果涉及到緩存,請執行CTRL-F5,它確實不應該再出現了。無論如何,我們很難調試,因爲我們無法添加新項目看看它是否一樣) – Andreas

回答

1

一些瀏覽器非常積極緩存AJAX請求如果沒有明確告知不能由服務器。

試着這麼做(從PHP手冊採取php.net/headers):

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
+0

雖然這是一個POST請求,但它們 – Andreas

+1

嗯,它顯然是被緩存:)我看過IE 8和9緩存各種不應該的東西(不知道他是否在使用IE。) – Corbin

+0

@Corbin:使用Safari和Chrome測試我的腳本 –

0

你應該時間戳添加到URL,而不是發送的數據..

var nocache = '?nocache=' + timestamp; 

$.ajax({ 
    type: "POST", 
    url: "jsfeed.php" + nocache, 
+0

這就是'cache:false' pro '$ .ajax'中的perty用於 - 自動附加時間戳。 – gilden

+0

試過這個。沒有效果... –

+0

@gilden:是的,我在搜索解決方案時同時實施了... –