日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

IE8浏览器缓存问题导致Ajax的GET请求只能执行一次的解决办法

發(fā)布時間:2023/12/3 HTML 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IE8浏览器缓存问题导致Ajax的GET请求只能执行一次的解决办法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自??IE8瀏覽器緩存問題導(dǎo)致Ajax的GET請求只能執(zhí)行一次的解決辦法

最近在測試兼容性問題的時候發(fā)現(xiàn),使用Ajax的GET請求向后臺獲取響應(yīng)結(jié)果時,如果是IE8瀏覽器,第一次發(fā)送請求時會得到正常的返回結(jié)果,然后當再去發(fā)送相同請求訪問后臺時,得到的結(jié)果總是第一次請求返回的結(jié)果。IE11、Chrome、Firefox都是正常的,只有IE8會出現(xiàn)這種現(xiàn)象。

為了重現(xiàn)遇到的這種現(xiàn)象,自己動手寫了一個非常簡單的小例子。

/*** 獲取當前時間* @param request* @return*/ @RequestMapping(value="/getRealTime") @ResponseBody public ResultBean<String> getCalendarInfo(HttpServletRequest request) {ResultBean<String> result = new ResultBean<String>();Date now = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");result.setProperties(true, "獲取當前時間成功", sdf.format(now));return result; } <!DOCTYPE HTML> <html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><title>Ajax測試</title><script src="http://static.blog.csdn.net/scripts/jquery.js" type="text/javascript"></script><script>$(function(){$(".js_btn").click(function(){$.ajax({type:'GET',url:'getRealTime',dataType:'json',success:function(d){if(d.isSuccess){$(".js_text").val(d.data);}},error:function(){alert("請求超時!");}})})})</script></head><body><div><input type="text" class="js_text" value="" /><input type="button" class="js_btn" value="獲取當前時間" /></div></body> </html>

在IE8下首次運行結(jié)果如下圖。之后再去點擊“獲取當前時間”時,得到的結(jié)果都和第一次點擊一樣。

?

在不斷測試后發(fā)現(xiàn),出現(xiàn)這種現(xiàn)象是因為IE8瀏覽器的緩存問題,在清除緩存后重新點擊,這時候就會返回正常的結(jié)果顯示在頁面上。IE8瀏覽器的緩存機制會將第一次發(fā)送請求的響應(yīng)返回的結(jié)果保存下來,之后我們再去發(fā)送相同的請求時IE8會將第一次請求保存下來的結(jié)果反復(fù)的使用。


翻閱資料并加上自己測試驗證后,總結(jié)出了兩種可用的解決辦法。

第一種解決辦法:

在Ajax方法中增加一條發(fā)送到服務(wù)器的數(shù)據(jù),該數(shù)據(jù)為Math對象方法random()生成的 0 ~ 1 之間的隨機數(shù),服務(wù)器端不對數(shù)據(jù)做任何處理。

data:{r:Math.random()}

修改后的JS代碼如下:

<script>$(function(){$(".js_btn").click(function(){$.ajax({type:'GET',url:'getRealTime',data:{r:Math.random()},dataType:'json',success:function(d){if(d.isSuccess){$(".js_text").val(d.data);}else{alert(d.message);}},error:function(){alert("請求超時!");}})})}) </script>

每次執(zhí)行請求的內(nèi)容如下:

?

點擊“獲取當前時間”后,每次向服務(wù)器端發(fā)送的請求內(nèi)容并不一樣,這樣一來IE8就不會去獲取上次請求返回的結(jié)果,而是重新向后臺發(fā)送新的請求,這樣就解決了IE8每次發(fā)送相同請求Ajax時都會首先讀取緩存中內(nèi)容的問題。

第二種解決辦法:

使用jQuery.ajaxSetup(name:value, name:value, …) 方法設(shè)置全局 AJAX 默認選項。?
 

通過這種辦法可以設(shè)置讓Ajax發(fā)送請求后得到響應(yīng)返回的結(jié)果不寫入瀏覽器的緩存中。

$.ajaxSetup({ cache:false });

修改后的JS代碼如下:

<script>$(function(){$.ajaxSetup({ cache:false });$(".js_btn").click(function(){$.ajax({type:'GET',url:'getRealTime',dataType:'json',success:function(d){if(d.isSuccess){$(".js_text").val(d.data);}else{alert(d.message);}},error:function(){alert("請求超時!");}})})}) </script>

每次執(zhí)行請求的內(nèi)容如下:

?

我們可以看到,這樣做原理其實和第一種方式差不多,在設(shè)置Ajax返回數(shù)據(jù)不寫入緩存后,每次點擊“獲取當前時間”后,向服務(wù)器端發(fā)送的請求內(nèi)容也是不一樣的,同理,這樣做也可以解決了IE8每次發(fā)送相同請求Ajax時都會首先讀取緩存中內(nèi)容的問題。

總結(jié)

以上是生活随笔為你收集整理的IE8浏览器缓存问题导致Ajax的GET请求只能执行一次的解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。