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