ajax的 IE cache 相关问题解决
程序员文章站
2022-05-03 08:06:11
运用ajax做了一个名字检验,第一次是有效的,但是提交过后,再检验一次,结果就不对了,是由于ie的cache的原因。 复制代码 代码如下: function verify(...
运用ajax做了一个名字检验,第一次是有效的,但是提交过后,再检验一次,结果就不对了,是由于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 取得最新的数据,但是 ie 就不一样了,它会 cache 住之前得到的数据,只有第一次 request 时会真正的去 server 读取数据,导致ajax数据不会随时间而更新….
解决方案(从网上收集的):
1、在服务端加 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发送请求前加上 xmlhttprequest.setrequestheader("if-modified-since","0");
3、在ajax发送请求前加上 xmlhttprequest.setrequestheader("cache-control","no-cache");
4、在 ajax 的 url 参数后加上 "?fresh=" + math.random(); //当然这里参数 fresh 可以任意取了
5、第四种方法和第三种类似,在 url 参数后加上 "?timestamp=" + new date().gettime(); //推荐使用这种方式,我用的就是这种,个人认为比较方便。
6、用post替代get:不推荐
复制代码 代码如下:
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 取得最新的数据,但是 ie 就不一样了,它会 cache 住之前得到的数据,只有第一次 request 时会真正的去 server 读取数据,导致ajax数据不会随时间而更新….
解决方案(从网上收集的):
1、在服务端加 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发送请求前加上 xmlhttprequest.setrequestheader("if-modified-since","0");
3、在ajax发送请求前加上 xmlhttprequest.setrequestheader("cache-control","no-cache");
4、在 ajax 的 url 参数后加上 "?fresh=" + math.random(); //当然这里参数 fresh 可以任意取了
5、第四种方法和第三种类似,在 url 参数后加上 "?timestamp=" + new date().gettime(); //推荐使用这种方式,我用的就是这种,个人认为比较方便。
6、用post替代get:不推荐
推荐阅读