IE bug:ajax請求返回304解決方案


bug說明:

同一賬戶下的默認收貨地址只有一個,默認收貨地址可以修改,修改完成后,使用ajax重新加載收貨地址部分。

默認收貨地址狀態標記:status = 1;

在IE瀏覽器做了修改后,重新加載的數據和未修改之前一樣,拿到的數據如下圖所示:

而在谷歌瀏覽器刷新頁面,拿到以下數據:

谷歌的數據和數據庫的數據是一致的。

開始以為是js代碼在IE瀏覽器運行錯誤,打開IE控制台后,發現代碼並沒有報錯。

於是我想是不是在IE下,請求沒有發生。

我在修改默認收貨地址之前,先將idea編輯run里面的代碼清空,然后修改默認收貨地址,發現idea編輯器里沒有運行代碼。初步判斷為請求沒有發生。

但是在IE瀏覽器是捕獲了請求的,如下圖所示,請求是發生了的!但是,在IE返回的304!!!

谷歌瀏覽器返回的是200:

 真是一群羊駝從我心里奔過!!IE ajax返回304!!每次請求走的都是緩存!!

IE下的ajax請求是按照IP地址和請求路由進行緩存。如果ajax請求使用的請求方式是get,同時參數、路徑相同,ajax會先從本地緩存中取。

 

解決方案:

1.直接在請求地址后面加一個時間戳或者是隨機數

如:url: '${rc.contextPath}/api/user/address?' + Math.random(),

2.禁止緩存

①前端頁面禁止緩存:<meta http-equiv="pragma" content="no-cache" />

          <meta http-equiv="cache-control" content="no-cache">

②前端ajax禁止緩存:ajax參數cache設置為false。

 說明:cache參數默認為true(當dataType為script時,默認為false)。設置為false將不會從瀏覽器緩存中加載請求信息。

至於后端該怎樣禁止緩存,我還不造,哈哈哈。

關於304的詳細解說,大家可以看看http://www.cnblogs.com/ziyunfei/archive/2012/11/16/2772729.htm這篇博文。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM