AJAX的緩存是由瀏覽器維持的,對于發向服務器的某個url,ajax僅在第一次請求時與服務器交互信息,之后的請求中,ajax不再向服務器提交請求,而是直接從緩存中提取數據。
有些情況下,我們需要每一次都從服務器得到更新后數據。思路是讓每次請求的url都不同,而又不影響正常應用:在url之后加入隨機內容。
e.g.
url=url+"&"+Math.random();
Key points:
1.每次請求的url都不一樣(ajax的緩存便不起作用)
2.不影響正常應用(最基本的)
這里我們由兩條結論:
1:Ajax的緩存和HTTP的緩存是一樣的
現代瀏覽器的HTTP和緩存機制比Ajax的XMLHttpRequest對象要差很多,所以它不認識也不關心Ajax請求.它僅僅是遵循普通的HTTP緩存規則,通過服務器返回的響應頭來進行緩存.
如果你已經對 HTTP緩存 有了解,那么你可以把HTTP緩存的知識用對Ajax緩存的理解上. 他們只有一點不同的,就是設置響應頭的方式會和普通文件不一樣.
下面這些響應頭可以讓你的Ajax可緩存:
Expires: 這一項應該被設置成未來的某個合適的時間點,時間點的設置取決于內容變動的頻繁程度.舉個栗子,如果請求的是個庫存數量,那么Expires的值可以是10秒以后.如果請求的是一個相片,那么Expires的值就可以久一點,因為它不會經常變動.Expires頭可以讓瀏覽器在一段時間內重用本地緩存數據,從而避免任何不必要的與服務器數據交互.
Last-Modified: 設置這一項是一個很好的選擇,通過它,瀏覽器在發送條件性GET請求的時候會使用請求頭里的 If-Modified-Since 來檢查本地緩存的內容.如果數據不需要更新,服務器會返回304響應狀態.
Cache-Control: 在合適的情況下,這個值應該被設置為 Public ,這樣所有的中間代理和緩存都可以被保存并且與其他用戶共享內容.在火狐里,它還支持HTTPS請求的緩存
當然,如果你使用POST方式發送Ajax是不能緩存的,因為POST請求永遠不會被緩存.如果你的Ajax請求會產生其他作用(比如銀行賬戶之間的轉賬),請使用POST請求.
我們設置了一個demo(這個demo已經不能看了
主站蜘蛛池模板:
蒙城县|
海门市|
平果县|
广宗县|
沂南县|
神木县|
全南县|
横峰县|
揭东县|
正定县|
石渠县|
平果县|
方正县|
青海省|
南部县|
辽宁省|
城市|
宿迁市|
永川市|
余姚市|
竹溪县|
桃园市|
天祝|
隆尧县|
石楼县|
扬中市|
无锡市|
冀州市|
贺州市|
静安区|
沂源县|
友谊县|
广汉市|
宝坻区|
天峨县|
儋州市|
炎陵县|
襄樊市|
平谷区|
肃南|
都匀市|