ajax的 IE cache 相關(guān)問題解決
更新時間:2013年04月02日 17:35:40 作者:
運(yùn)用Ajax做了一個名字檢驗(yàn),第一次是有效的,但是提交過后,再檢驗(yàn)一次,結(jié)果就不對了,是由于IE的cache的原因,接下來介紹下詳細(xì)的解決方法,感性的朋友可以參考下哈
運(yùn)用Ajax做了一個名字檢驗(yàn),第一次是有效的,但是提交過后,再檢驗(yàn)一次,結(jié)果就不對了,是由于IE的cache的原因。
function verify() {
$.ajax({
//issue for IE cache; timestamp=" + new Date().getTime()
url:"checkGroupName?timestamp=" + new Date().getTime(),
async: true,
data:"groupName=" + $("#cn").val()+"&groupTypeForDetail="+$("#groupType").val()+"&prefix="+$("#p").val(),
dataType:"html",
success:function(data){
if(data==1){
$("#result").html("<font color='green'>Group name["+$("#p").val()+ $("#cn").val()+"]Valid</font>");
$("#email").val($("#p").val()+ $("#cn").val()+$("#emailHidden").val());
$('#subData').removeAttr("disabled");
}else if(data==2){
$("#result").html("<font color='red'>Group name["+$("#p").val()+ $("#cn").val()+ "]already existed.</font>");
$('#subData').attr('disabled',"true");
}else{
$("#result").html("<font color='red'>Group name can not be empty.</font>");
$('#subData').attr('disabled',"true");
}
}
});
}
原理:
Firefox 每次 request 都會重新再回一次 server 取得最新的數(shù)據(jù),但是 IE 就不一樣了,它會 cache 住之前得到的數(shù)據(jù),只有第一次 request 時會真正的去 server 讀取數(shù)據(jù),導(dǎo)致ajax數(shù)據(jù)不會隨時間而更新….
解決方案(從網(wǎng)上收集的):
1、在服務(wù)端加 header("Cache-Control: no-cache, must-revalidate"); 或者用下面的組合更好一些:
header("Expires: Sat, 1 Jan 2005 00:00:00 GMT");
header("Last-Modified: ".gmdate( "D, d M Y H:i:s")."GMT");
header("cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
2、在ajax發(fā)送請求前加上 xmlHttpRequest.setRequestHeader("If-Modified-Since","0");
3、在ajax發(fā)送請求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");
4、在 Ajax 的 URL 參數(shù)后加上 "?fresh=" + Math.random(); //當(dāng)然這里參數(shù) fresh 可以任意取了
5、第四種方法和第三種類似,在 URL 參數(shù)后加上 "?timestamp=" + new Date().getTime(); //推薦使用這種方式,我用的就是這種,個人認(rèn)為比較方便。
6、用POST替代GET:不推薦
復(fù)制代碼 代碼如下:
function verify() {
$.ajax({
//issue for IE cache; timestamp=" + new Date().getTime()
url:"checkGroupName?timestamp=" + new Date().getTime(),
async: true,
data:"groupName=" + $("#cn").val()+"&groupTypeForDetail="+$("#groupType").val()+"&prefix="+$("#p").val(),
dataType:"html",
success:function(data){
if(data==1){
$("#result").html("<font color='green'>Group name["+$("#p").val()+ $("#cn").val()+"]Valid</font>");
$("#email").val($("#p").val()+ $("#cn").val()+$("#emailHidden").val());
$('#subData').removeAttr("disabled");
}else if(data==2){
$("#result").html("<font color='red'>Group name["+$("#p").val()+ $("#cn").val()+ "]already existed.</font>");
$('#subData').attr('disabled',"true");
}else{
$("#result").html("<font color='red'>Group name can not be empty.</font>");
$('#subData').attr('disabled',"true");
}
}
});
}
原理:
Firefox 每次 request 都會重新再回一次 server 取得最新的數(shù)據(jù),但是 IE 就不一樣了,它會 cache 住之前得到的數(shù)據(jù),只有第一次 request 時會真正的去 server 讀取數(shù)據(jù),導(dǎo)致ajax數(shù)據(jù)不會隨時間而更新….
解決方案(從網(wǎng)上收集的):
1、在服務(wù)端加 header("Cache-Control: no-cache, must-revalidate"); 或者用下面的組合更好一些:
復(fù)制代碼 代碼如下:
header("Expires: Sat, 1 Jan 2005 00:00:00 GMT");
header("Last-Modified: ".gmdate( "D, d M Y H:i:s")."GMT");
header("cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
2、在ajax發(fā)送請求前加上 xmlHttpRequest.setRequestHeader("If-Modified-Since","0");
3、在ajax發(fā)送請求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");
4、在 Ajax 的 URL 參數(shù)后加上 "?fresh=" + Math.random(); //當(dāng)然這里參數(shù) fresh 可以任意取了
5、第四種方法和第三種類似,在 URL 參數(shù)后加上 "?timestamp=" + new Date().getTime(); //推薦使用這種方式,我用的就是這種,個人認(rèn)為比較方便。
6、用POST替代GET:不推薦
相關(guān)文章
Ajax 表單驗(yàn)證 實(shí)現(xiàn)代碼
最近做了一個項(xiàng)目中的登錄注冊模塊,大部分功能從一個網(wǎng)站里扣出來的,部分功能自己修改,自認(rèn)為還是有點(diǎn)人性化的2009-05-05
JQuery+ajax實(shí)現(xiàn)批量上傳圖片(自寫)
jquery+ajax方式實(shí)現(xiàn)單張圖片上傳的代碼是可以搜的到,實(shí)現(xiàn)批量上傳圖片的程序卻沒搜索到于是自己寫了個,感興趣的朋友可以參考下2013-04-04
Ajax向后臺傳json格式的數(shù)據(jù)出現(xiàn)415錯誤的原因分析及解決方法
ajax往后臺傳json格式數(shù)據(jù)報415錯誤,什么原因?qū)е碌哪?,該怎么解決呢?下面腳本之家小編給大家?guī)砹薃jax向后臺傳json格式的數(shù)據(jù)出現(xiàn)415錯誤的原因分析及解決方法感興趣的朋友一起看看吧2016-10-10
ajax實(shí)現(xiàn)excel報表導(dǎo)出
這篇文章主要為大家詳細(xì)介紹了ajax實(shí)現(xiàn)excel報表導(dǎo)出,解決亂碼問題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-07-07
Ajax與mysql數(shù)據(jù)交互制作留言板功能(全)
這篇文章主要為大家詳細(xì)介紹了Ajax與mysql數(shù)據(jù)交互,實(shí)現(xiàn)留言板功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02
Ajax商品分類三級聯(lián)動的簡單實(shí)現(xiàn)(案例)
下面小編就為大家?guī)硪黄狝jax商品分類三級聯(lián)動的簡單實(shí)現(xiàn)(案例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08
多ajax請求的各類解決方案(同步, 隊(duì)列, cancel請求)
ajax帶來很好的用戶體驗(yàn),于是一個稍微注重web系統(tǒng)使用ajax基本成為必然。當(dāng)傳統(tǒng)功能型web項(xiàng)目向用戶體驗(yàn)型項(xiàng)目轉(zhuǎn)變時,層出不窮的需求就來了。正如本篇所介紹的就是一個多個AJAX請求的情況下,如何利用jquery來處理幾種case2012-03-03
IE瀏覽器與FF瀏覽器關(guān)于Ajax傳遞參數(shù)值為中文時的區(qū)別實(shí)例分析
這篇文章主要介紹了IE瀏覽器與FF瀏覽器關(guān)于Ajax傳遞參數(shù)值為中文時的區(qū)別,結(jié)合實(shí)例分析說明了ajax參數(shù)傳遞過程中的參數(shù)轉(zhuǎn)碼相關(guān)注意事項(xiàng)與使用技巧,需要的朋友可以參考下2015-12-12

