天天看點

Ajax緩存處理(轉)

Ajax中請求被緩存的問題

在Ajax開發中,會遇到浏覽器緩存内容的問題,比如,某個元素注冊了滑鼠事件(onmouseover),事件觸發後會通過 xmlhttprequest到伺服器擷取内容,在不重新整理頁面的情況下,浏覽器會緩存第一次請求的内容,服務端更新後浏覽器仍然顯示第一次的内容。

通常,這種請求都是xmlhttprequest發起的GET請求。根據 HTTP 規範,GET 用于資訊擷取,而且應該是幂等的。也就是說,當使用相同的URL重複GET請求會傳回預期的相同結果時,GET方法才是适用的。當對一個請求有副作用的時候(例如,送出資料注冊新使用者時),應該使用POST請求而不是GET。是以浏覽器會對GET請求做緩存處理。

解決辦法:

一. GET請求URL後附加字串,讓伺服器認為不是相同的請求。

例 "http://www.example.com/index.php?class=aitcle&page=5&_t=" + new Date().getTime()

二. 在ajax發送請求前加上 xmlHttpRequest.setRequestHeader("If-Modified-Since","0")

三. 在ajax發送請求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");

四. 服務端響應請求時加 header("Cache-Control: no-cache, must-revalidate"); (PHP)

五. 使用POST代替GET,浏覽器不會對POST做緩存

轉自 http://yanglei008.javaeye.com/blog/222401