今天做了一個小功能:點選滑鼠實時更新系統時間,採用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上設定禁止快取等方法。時間倉促,這些方法日後詳細查詢。