起源
同一份代碼在chrome和ie下出現(xiàn)不同的結(jié)果,具體表現(xiàn)為:在ie下保存操作后,頁面依然顯示為未勾選狀態(tài)。
思考
最初的時候一直思考是否是代碼問題,一度在IE下debug整塊代碼,無果。后來觀察了下三個請求均為get請求,于是轉(zhuǎn)而思考,是否是因為get請求在ie下會有緩存問題。
解釋
在IE下用Ajax請求某一頁面,通常會因為緩存的原因而返回上一次的結(jié)果,造成混亂。
- get方式時,獲取數(shù)據(jù),因發(fā)送參數(shù)和地址都一致,故IE瀏覽器會從緩存中取,而不會去請求服務(wù)器端,
- post方式因為參數(shù)的不同,不會產(chǎn)生這個問題。
為了不受緩存影響,可以這樣做:
在AJAX請求的頁面后加個隨機函數(shù),我們可以使用隨機時間函數(shù)
在javascript發(fā)送的URL后加上 t=Math.random()
例如這樣:
URL+"&"+"t="+Math.random();//或者new Date();
在 URL 參數(shù)后加上"?timestamp=" + new Date().getTime();
或者在請求參數(shù)data中添加:
data: {
_t: new Date().valueOf() //加時間戳
//_t: Math.random() 加隨機數(shù)
},
示例
$.ajax({
type: "get",
dataType:"json",
url: "$!{rc.contextPath}/parkledVerb/loadVerbData?id="+id,
data: {
_t: new Date().valueOf() //加時間戳
//_t: Math.random() 加隨機數(shù)
},
async: false,
success: function (data) {
···
});
最好的方法:
$.ajaxSetup({cache:false})
這樣頁面中所有的ajax請求時,都執(zhí)行這個。就不必改已經(jīng)完成的N個接口。