ajax的 IE cache 相关问题解决
2013-04-02 00:00
435 查看
运用Ajax做了一个名字检验,第一次是有效的,但是提交过后,再检验一次,结果就不对了,是由于IE的cache的原因。
原理:
Firefox 每次 request 都会重新再回一次 server 取得最新的数据,但是 IE 就不一样了,它会 cache 住之前得到的数据,只有第一次 request 时会真正的去 server 读取数据,导致ajax数据不会随时间而更新….
解决方案(从网上收集的):
1、在服务端加 header("Cache-Control: no-cache, must-revalidate"); 或者用下面的组合更好一些:
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:不推荐
相关文章推荐
- ajax的 IE cache 相关问题解决
- 解决Asp.net页面找不到ajaxpro相关文件问题
- 关于ajax的IE cache 问题分析及解决
- 利用ajax在index页面自动执行方法并显示相关内容,在执行相关按钮操作(如登录注册)后返回index页面后ajax不执行,无法显示相关内容的问题解决方法之一
- 解决ajax回调方法返回当前html的问题
- jsp中 ajax的get请求的中文乱码问题的解决方法
- 解决许可证的相关问题
- ajax请求中遇到的跨域问题的解决办法(jsonp)
- 博客园搬家之mysql相关问题解决
- 解决Linux程序编译链接动态库版本的相关问题
- IE浏览器中的ajax缓存问题与new Date()兼容性问题的解决方法
- AJAX应用解决一些常见问题
- 解决AJAX读取页面中的Javascript问题 document.write
- 解决ajax提交表单时中文乱码的问题
- ajax解决常遇到问题
- 用Nginx和Apache的反向代理解决Ajax的跨域问题
- jQuery插件之ajaxFileUpload(异步上传图片并实时显示,并解决onchange后ajaxFileUpload失效问题)
- ASP.NET MVC应用中浏览器无法发出Ajax请求的问题解决一例
- Ajax开发相关问题
- 使用jsonp及jquery的$.ajax解决跨域问题