Ajax在IE上做輪詢時setInterval方法只執行一次
阿新 • • 發佈:2019-02-17
因為視訊播放要寫一個非同步驗證是否有異地登入,所以用了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做快取。