1. 程式人生 > >Ajax在IE上做輪詢時setInterval方法只執行一次

Ajax在IE上做輪詢時setInterval方法只執行一次

因為視訊播放要寫一個非同步驗證是否有異地登入,所以用了setInterval()方法來週期呼叫後臺的isLogin介面。有趣的是谷歌會週期呼叫介面,而IE只會呼叫一次。

IE瀏覽器下使用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”); 
四. 使用POST代替GET,瀏覽器不會對POST做快取。