AJAX中消除Tomcat会cache action返回值的问题

系统 1854 0
我们在写AJAX的时候,会用定时器定时调用一个action,来检测一些东西。比如EC 2.0中,我们用AJAX技术定时检查用户的消息收件箱,看有没有新的消息,有多少条。但是在实际应用中,我们发现Tomcat会cache我们这个检查 消息类的返回值,也就是说,如果现在检测到有3条新的消息,那么,之后的AJAX调用,无论数据库中的新消息数量是否发生变化了,Tomcat都返回一样 的数据给JSP,也就是3条消息。

这是非常讨厌的一个现象,因为Tomcat认为我们每次请求的都是同一个URL,自然它就cache这个action的返回值了。唯一的办法就是让我们每次AJAX请求的URL都不一样,这样才能消除Tomcat的这种cache行为。

那么,最容易想到的就是在URL后面加上当前时间,因为时间是一直在流逝的,所以,加上时间后,每次的URL就不一样了,就能消除Tomcat的cache行为了。在javascript中,我们是这样做的:

         function  getMsgNotify() {
         
var  dateInstance  =   new  Date();
         
var  url  =   " <%=webContextRoot%> "   +   " /toModule.ec?prefix=/portal&page=/GetMsgNotify.ec&counter= "   +  dateInstance.getTime();
         request.open(
" GET " , url,  true );
         request.onreadystatechange 
=  updatePage;
         request.send(
null );
       }

这个getMsgNotify这个函数就会被定时调用,这里要注意,var dataInstance = new Date(); 这句代码一定要写在这个被定时调用的方法里面,这样才能保证每次调用这个function的时候,得到的都是当前时间,如果将这句代码放在外面,那么这句 代码就只会被执行一次,自然得到的时间就是最早的那个时间了。注:javascript中,new Date对象的时候不加参数表示返回当前时间。

然后我们就用了getTime这个函数,这个函数返回我们取到的date时间和197x年的那个时间的差值(秒数),这样就保证了每次的URL不一样了。

在此之前,我没用这个方法,我是申明了一个全局变量counter,初始值为0,然后每次getMsgNotify之后,都把这个counter 加1,来达到生成不同URL的目的,但是这样是不行的,因为如果用户不关闭浏览器,那么每一次加载这个页面,counter都从0开始计数,这样就又会发 生当前的URL和上次一样的情况(都是从0开始计数的嘛)!所以,科学的做法还是上面的那种,用时间来生成永不相同的URL。

 

AJAX中消除Tomcat会cache action返回值的问题


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论