在發(fā)送ajax請求的時候肆汹,為了保證每次的都與服務器交互瑞你,就要傳遞一個參數每次都不一樣镀赌,這里就用了時間戳
大家在系統(tǒng)開發(fā)中都可能會在js中用到ajax或者dwr音念,因為IE的緩存沪饺,使得我們在填入相同的值的時候總是使用IE緩存
什么是Ajax緩存原理?
Ajax在發(fā)送的數據成功后症昏,會把請求的URL和返回的響應結果保存在緩存內随闽,當下一次調用Ajax發(fā)送相同的請求時,它會直接從緩存中把數據取出來肝谭,這是為了提高頁面的響應速度和用戶體驗掘宪。當前這要求兩次請求URL完全相同,包括參數攘烛。這個時候魏滚,瀏覽器就不會與服務器交互。
Ajax緩存的好處
這種設計使客戶端對一些靜態(tài)頁面內容的請求坟漱,比如圖片鼠次,css文件,js腳本等芋齿,變得更加快捷腥寇,提高了頁面的響應速度,也節(jié)省了網絡通信資源觅捆。
Ajax緩存的不足
Ajax緩存雖然有上述的好處赦役,但是如果通過Ajax對一些后臺數據進行更改的時候,雖然數據在后臺已經發(fā)生改變栅炒,但是頁面緩存中并沒有改變掂摔,對于相同的URL,Ajax提交過去以后赢赊,瀏覽器還只是簡單的從緩存中拿數據乙漓,這種情況當然就不行了。
四释移、解決Ajax緩存問題的方法
解決這個問題最有效的辦法是禁止頁面緩存叭披,有以下幾種處理方法:
1、在ajax發(fā)送請求前加上 xmlHttpRequest.setRequestHeader(“Cache-Control”,”no-cache”);
2玩讳、在服務端加 header(“Cache-Control: no-cache, must-revalidate”);
3趋观、在ajax發(fā)送請求前加上 xmlHttpRequest.setRequestHeader(“If-Modified-Since”,”0″);
4扛禽、在 Ajax 的 URL 參數后加上 "?fresh=" + Math.random(); //當然這里參數 fresh 可以任意取了
5、第五種方法和第四種類似皱坛,在 URL 參數后加上 "?timestamp=" + new Date().getTime();
6编曼、用POST替代GET:不推薦
7、jQuery提供一個防止ajax使用緩存的方法:
javascript" language="JavaScript">
$.ajaxSetup ({
cache: false //close AJAX cache
});
8剩辟、修改load 加載的url地址掐场,如在url 多加個時間參數就可以:
function loadEventInfoPage(eventId){
$.ajaxSetup ({
cache: true // AJAX cache? 下面加上時間后load的頁面中的js、css圖片等都會重新加載贩猎,
//加上這句action會重新加載熊户,但是js、css吭服、圖片等會走緩存
});
$("#showEventInfo").load(ctx + "/custEvents/viewEvent.action",? {"complaint.Id":eventId, "tt":(new Date()).getTime()},function(){})
}
9嚷堡、設置html的緩存