2016-04-05 172 views
2

所以我有一個網站上載內容的AJAX系統,它的工作原理是這樣的:Microsoft Edge緩存Ajax請求?

當點擊一個按鈕,一個JavaScript函數被調用:

onclick="doSomething('abc')" 

我的JavaScript看起來像這樣:

//Ajax 
var xmlhttp; 
function loadXMLDoc(url,cfunc) { 
    if (window.XMLHttpRequest) { 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } else { 
     // code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=cfunc; 
    xmlhttp.open("GET",url,true); 
    xmlhttp.send(); 
} 
function doSomething(var) { 
    loadXMLDoc("http://www.website.com/ajax/doSomething.php?var="+var, function() { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
      document.getElementById("response-container").innerHTML=xmlhttp.responseText; 
     } 
    }); 
} 

就稱爲Echo的文字有點像這樣的PHP文件:

echo "Response here"; 

通常,我使用這種類型的系統在每次運行這個Javascript函數時在具有特定id的元素中加載新內容。

這已經完美工作了3年多,但由於某些原因,Microsoft Edge正在緩存這方面的響應。所以內容沒有被正確生成。所以你只運行一次,並且在x時間內它將繼續返回相同的緩存響應。

任何想法是什麼正確的修復這是什麼?我已經看到使用標題的提及,但我不確定如何在這種情況下應用修補程序。

+2

你試過添加時間戳的查詢字符串參數?我用它來強制CSS文件不被緩存。即''var =「+ var +」&ts =「+ Date.now()' – Quantastical

+0

緩存ajax請求是一個常見問題,瀏覽器往往會越來越積極地緩存,帶有時間戳值的附加請求參數是一個常用的解決方法 –

回答

7

我們在邊緣和IE 10/11上也發現了緩存的ajax請求問題。我們的解決方案是使用HTTP-headerCache-Control: no-cache這也沒有時間戳。

1

的最佳方式在IE中禁用緩存或MS Edge是做到這一點:

只需按下F12鍵,然後轉到網絡選項卡,找到第四此標題的工具框中的按鈕:始終從服務器刷新。

將每次發送的請求沒有緩存.. enter image description here

+0

這個答案對於這個上下文沒有什麼幫助,他們問如何讓他們的web應用程序的所有用戶都可以使用這個工作,要求每個用戶都改變他們的瀏覽器設置通常是不可行的。 – Keith