IE瀏覽器中ajax使用快取資料的問題

勤勞的插秧哥發表於2014-11-03

今天做了一個小功能:點選滑鼠實時更新系統時間,採用ajax,過程很順利,沒遇到啥差錯,谷歌,火狐,歐鵬一律通過,懷著忐忑的心情點開了IE8,果然,IE要對得起前端殺手的稱號:更新不了時間。

查了一下這才發現IE一直存在這個問題,內部原因是:當第一次請求資料時能順利返回,第二次以後IE會預設使用上次的快取資料,這就造成了每次傳送請求後返回的資料沒有更新的原因。

解決方法:

1.最直接有效的就是在請求頁後面加上隨機函式,隨機函式可以是Math.random(),也可以是new Date().getTime();這樣URL每次都是新的。

之前程式碼:XHR.open('get', 'demo.php', false);

改進程式碼:XHR.open('get', 'demo.php?rand='+new Date().getTime(), false); //用new Date().getTime();

    或:xhr.open('get', 'demo.php?rand='+Math.random(), false);                 //用Math.random();

2.在傳送請求send();前加一行程式碼:(XHR物件).setRequestHeader("If-Modified-Since","0");

3.據說改用post提交方式也能解決這個問題,但我試了一下發現不行,不知為何。還有在header上設定禁止快取等方法。時間倉促,這些方法日後詳細查詢。

相關文章