昨天被问到如何防止Ajax缓存的问题竟然没想到过,Ajax的本质就是将状态保存在客户端,因此资源的缓存和再利用是他的优势所在,但有时候不希望被缓存,例如计数器,不同请求的计数器得到的结果应该是最新的。在线时长也应该每次刷新不一样。
解决办法是在请求的参数(url)后面加个随机时间,防止缓存
url=url+ "?r= "+Math.random();//请求地址变化,防止缓存
REQ.open(HttpMethod,url,true);
-----------------------
(转载)
今日在做Ajax的项目,发现一个问题:提交数据后,取不回提交的数据。郁闷多时,仔细分析,发现后台日志没有取数据的消息,前端也没有出现“正在读入数据”的提示。因此觉得应该是系统缓存的问题,遂google,解决。方法如下:
方法1:服务器端代码加入response.setHeader("Cache-Control", "no-cache, must-revalidate");
方法2:用JavaScript在Ajax提交的时候加入一个随机数作为URL中的一个参数。req.open(url + "&" + Math.random).
原因:IE中如果XMLHttpRequest提交的URL与历史一样则使用缓存,根本不向服务器端提交。因此无法取到刚提交的数据。
---------------------------------------------------------------------------------------------------------------------------
-------------方法二:-----------------
终于让我找到了一个好办法,那就在ajax发送请求前加上
xmlHTTP.setRequestHeader("If-Modified-Since","0");
怎么样,很简单吧!!之前找的什么在URL家一个随即数什么的,我用了下,不是很好用。
现在就把使用的具体代码贴下来吧!!
<head>
<title>My first ajax programe</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script language="javascript" type="text/javascript">
<!--
var xmlHTTP;
// =======================================
// Function Name:creatXMLHTTP()
// Function:Creat XMLHTTPRequest Object
// =======================================
function createXMLHTTP(){
if(window.ActiveXObject) {
xmlHTTP = new ActiveXObject('Microsoft.XMLHTTP'); //if IE
}
else if(window.XMLHTTPRequest){
xmlHTTP = new XMLHTTPRequest();
}
}
function getHTMLinfo(URL){
createXMLHTTP();
xmlHTTP.open("get", URL, true);
xmlHTTP.onreadystatechange = callHTML;
xmlHTTP.setRequestHeader("If-Modified-Since","0");
xmlHTTP.send();
}
function callHTML(){
if(xmlHTTP.readyState == 4){
if(xmlHTTP.status ==200){
alert("服务器返回信息:" + xmlHTTP.responseText);
document.write(xmlHTTP.responseText); // 将加载html.htm到当前页面
}
}
}
//-->
</script>
</head>
<body>
<form name="frmTest" action="#">
<input name="btnShowInfo" type="button" value="显示服务器返回信息" οnclick="getHTMLinfo('http://localhost/html.htm')">
</form>
</body>
</html>
这里的html.htm大家自己随便写一个页面吧,看看你修改后再来刷当前页面,是不是即时的改变了内容