一、遇到的問題
最近在項目中遇到一個問題:由公司內網訪問系統執行某一操作時,瀏覽器正確發送請求(服務端代碼有打印日志),但使用公司外網執行形同操作,服務端未打印日志(請求並未到達服務端),瀏覽器卻顯示已發送請求,且返回了數據(但數據中的業務數據為空)。
初步判斷應該是與外網有關,於是找到運維人員幫忙在服務器上抓包,結果發現外網的請求並未到達服務端,看來該問題應該是前端原因導致。
查看前端發起請求的代碼,發現該請求是GET請求,查找資料后才知道:原來GET請求在有些瀏覽器中會緩存,再次請求時,瀏覽器不會發送請求,而是使用上次請求獲取到的結果。
二、jQuery解決方案如下:
$.ajax({ url: '/outer/cert/extension/getLatestCertOperInfo', type: 'get', dataType: 'json', async: false, cache: false, success: function (data) { } });
將cache設置為false。它的工作原理是在GET請求參數中附加時間戳"_={timestamp}"
注:也曾看到通過隨機數形式解決Ajax中的緩存問題的方案,但是這種解決方案並不是特別可靠。因為隨機數也有相同的情況。