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


    我们在写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。

  • 相关阅读:
    [LeetCode] 90. 子集 II
    [LeetCode] 91. 解码方法
    [LeetCode] 89. 格雷编码
    [LeetCode] 88. 合并两个有序数组
    转:Google论文之三----MapReduce
    转:Google论文之二----Google文件系统(GFS)翻译学习
    转:Zend Framework 2.0 分析
    转:PHP include()和require()方法的区别
    转:cookie和session(二)——php应用
    转:cookie和session(一)——原理
  • 原文地址:https://www.cnblogs.com/super119/p/1989370.html
Copyright © 2020-2023  润新知