1. 程式人生 > >Ajax頁面快取問題分析與解決辦法

Ajax頁面快取問題分析與解決辦法

Ajax頁面快取是ajax處理資料時對一些重複相同資料進行一個快取操作,這樣從另一個層面對於我們來講是非常的不錯了,但有時我們並不希望它快取要如何處理呢?下面我們一起來看看關於頁面快取問題分析與解決,希望例子對各位會帶來幫助。

一、什麼是Ajax快取原理?

Ajax在傳送的資料成功後,會把請求的URL和返回的響應結果儲存在快取內,當下一次呼叫Ajax傳送相同的請求時,它會直接從快取中把資料取出來,這是為了提高頁面的響應速度和使用者體驗。當前這要求兩次請求URL完全相同,包括引數。這個時候,瀏覽器就不會與伺服器互動。

二、Ajax快取的好處

這種設計使客戶端對一些靜態頁面內容的請求,比如圖片,css檔案,js指令碼等,變得更加快捷,提高了頁面的響應速度,也節省了網路通訊資源。

三、Ajax快取的不足

Ajax快取雖然有上述的好處,但是如果通過Ajax對一些後臺資料進行更改的時候,雖然資料在後臺已經發生改變,但是頁面快取中並沒有改變,對於相同的URL,Ajax提交過去以後,瀏覽器還只是簡單的從快取中拿資料,這種情況當然就不行了。

四、解決Ajax快取問題的方法

解決這個問題最有效的辦法是禁止頁面快取,有以下幾種處理方法:

1、在ajax傳送請求前加上 xmlHttpRequest.setRequestHeader(“Cache-Control”,”no-cache”);

2、在服務端加 header(“Cache-Control: no-cache, must-revalidate”);

3、在ajax傳送請求前加上 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使用快取的方法:

<script type="text/javascript" language="javascript">
     $.ajaxSetup ({
           cache: false //close AJAX cache
      });
</script>
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的快取

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">   
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">   
<META HTTP-EQUIV="Expires" CONTENT="0">