关于ajax在IE下缓存的问题

前端之家收集整理的这篇文章主要介绍了关于ajax在IE下缓存的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

采用AJAX技术的时候 通常我们无刷新页面提交数据后 用同样的url去获取数据的时候会发现是以前的数据~那样就给client端带来假象了~~ 采用以下的方法可以取消缓存
htm网页
<Metahttp-equiv="pragma"content="no-cache">
<Metahttp-equiv="cache-control"content="no-cache,must-revalidate">
<Metahttp-equiv="expires"content="wed,26feb199708:21:57gmt">
或者<Metahttp-equiv="expires"content="0">
asp网页
response.expires=-1
response.expiresabsolute=now()-1
response.cachecontrol="no-cache"
PHP网页
header ("Cache-Control: pre-check=0,post-check=0,max-age=0",false);
header("expires:mon,26jul199705:00:00gmt");
header("cache-control:no-cache,must-revalidate");
header("pragma:no-cache");
jsp网页
response.addHeader("pragma","no-cache");
response.addHeader("cache-control","no-cache,must-revalidate");
response.addHeader("expires","0");

asp.net

只要在aspx.cs代码的Page_Load事件中加上

Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

即可.


IE下的缓存问题

由于IE的缓存处理机制问题,每次通过XMLHttpRequest访问动态页面返回的总是首次访问的内容解决方法有:

1、客户端通过添加随机字符串解决。如:
var url = 'http://dancewithnet.com/';
url += '?temp=' + new Date().getTime();
url += '?temp=' + Math.random();
2、在HTTP headers禁止缓存。如:
HTTP:
<Meta http-equiv="pragma" content="no-cache" />
<Meta http-equiv="Cache-Control" content="no-cache,must-revalidate" />
<Meta http-equiv="expires" content="Thu,01 Jan 1970 00:00:01 GMT" />
<Meta http-equiv="expires" content="0" />
PHP
header("Expires: Thu,01 Jan 1970 00:00:01 GMT");
header("Cache-Control: no-cache,must-revalidate");
header("Pragma: no-cache");
ASP:
Response.expires=0
Response.addHeader("pragma","no-cache")
Response.addHeader("Cache-Control",must-revalidate")
JSP:
response.addHeader("Cache-Control","no-cache");
response.addHeader("Expires","Thu,01 Jan 1970 00:00:01 GMT");

3、在XMLHttpRequest发送请求之前加上
XMLHttpRequest.setRequestHeader("If-Modified-Since","0");
或者XMLHttpRequest.setRequestHeader("Cache-Control","no-cache");
然后再
XMLHttpRequest.send(null);
注:XMLHttpRequest可以是你定义的对象,例如是:xmlhtp = new XMLHttpRequest();那上面的XMLHttpRequest就是xmlhttp。

4、IE下的reponseXML问题

使用responseXML时,IE下只能接受.xml为后缀的XML文件,如果不能以.xml文件为结尾的,则需要如下处理:

在服务器端声明是xml文件类型。如:
PHP:header("Content-Type:text/xml;charset=utf-8");
ASP:Response.ContentType = "text/xml";
JSP:response.setHeader("ContentType","text/xml");
利用responseText获取,然后封装成XML。
在AJAX应用上,JSON和JsonML是XML非常好的替代品。

5、用POST替代GET:不推荐

在Firefox中测试了一下,不存在这个问题。

另外,在Firefox中脚本是严格区分大小写的,IE并不严格区分。

例如:xmlHttpRequest.readyState其中“State”的“S”必须大写,否则在IE中正常的功能在Firefox中无法实现,会出现undefined错误

另:PHP后退页面过期或不存在问题的解决

post后或使用了使用了session都有可能引起这种情况

解决办法,在开头加入如下代码即可:

header("Cache-control: private");


本文转载自『北漂石头的博客
http://www.niutian365.com/blog/ 更多精彩内容,欢迎访问北漂石头的博客!

原文链接:https://www.f2er.com/ajax/166609.html

猜你在找的Ajax相关文章