注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

庄庄的家

庄庄的家-网易博客

 
 
 

日志

 
 

Ajax 请求地址变化,防止缓存 的方法  

2008-02-29 17:43:15|  分类: Javascript |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

昨天被问到如何防止Ajax缓存的问题竟然没想到过,Ajax的本质就是将状态保存在客户端,因此资源的缓存和再利用是他的优势所在,但有时候不希望被缓存,例如计数器,不同请求的计数器得到的结果应该是最新的。在线时长也应该每次刷新不一样。

解决办法是在请求的参数(url)后面加个随机时间,防止缓存

url=url+ "?r= "+Math.random();//请求地址变化,防止缓存
REQ.open(HttpMethod,url,true);

-----------------------

------------方法一: ------
Ajax缓存问题

(转载)

今日在做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家一个随即数什么的,我用了下,不是很好用。

现在就把使用的具体代码贴下来吧!!

CODE:
<html>
<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="显示服务器返回信息" onclick="getHTMLinfo('http://localhost/html.htm')">
         </form>
</body>
</html>


这里的html.htm大家自己随便写一个页面吧,看看你修改后再来刷当前页面,是不是即时的改变了内容.

  评论这张
 
阅读(278)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017