解惑

解己之惑,解人之惑

日:2007年2月15日

浏览器缓存

相信有不少人会遇到浏览器缓存的问题,因为IE默认会缓存访问过的网页,特别是URL的参数是固定的,但是很可能内容会变化。
大部分都知道的可能是在head中增加meta信息:
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
而有文章指出这个依然有问题,如果网页内容超过32K,那么那个设置就实效了,所以要把它放到网页的最后:
            <BODY>
网页内容。。。
</BODY>
<HEAD>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
</HTML>

现在AJAX很流行,而AJAX返回的内容很可能不再是一个完整的网页,那么就不能使用上述的方法,有另外的文章说到可以使用服务器端的HTTP头控制,我试验的结果是无效
    response.setHeader("Cache-Control","no-cache");
    response.setHeader("Cache-Control","no-store");
    response.setHeader("Cache-Control","must-revalidate");

最后采取的方法就是在使用AJAX发送请求的时候附加一个时间戳:
var xmlhttp = createrequest();
xmlhttp.open("GET",appendTimestamp(url),true);

  function appendTimestamp(url)
  {
      if (url.indexOf("?")>0)
      {
          return url+"&ajax_time="+new Date().getTime();
      } else
      {
          return url+"?ajax_time="+new Date().getTime();
      }
  }

当然这个方法也只能解决部分问题,如果URL太长也不行。

更新:
对于AJAX的情况,也可以使用
xmlhttp.setRequestHeader("Cache-Control","no-cache");

推荐另外一个日志:再论怎么有效利用浏览器缓存之怎么避免浏览器缓存静态文件

2007年2月28日更新:
使用服务器端控制AJAX页面缓存:
    response.setHeader( "Pragma", "no-cache" );
    response.addHeader( "Cache-Control", "must-revalidate" );
    response.addHeader( "Cache-Control", "no-cache" );
    response.addHeader( "Cache-Control", "no-store" );
    response.setDateHeader("Expires", 0);
单纯的使用 xmlhttp.setRequestHeader("Cache-Control","no-cache")无效。

痛苦的春节

虽然这样说不太好,但是这个确实是我的真实感受,回家的票买不到,回来的票也买不到。本来是坐别人的车回去的,但是他们决定今天就走,下午两点出发,先到扬州,然后明天再上路,而我今天不能走,事情还没有做完,而且那样的话也比较麻烦,打电话到航空售票的地方,最开始说只有明天下午的一个航班,还是头等舱,只有一个位子,后来又打电话给我说今天下午有一个位子,950(票价810,建设费100,手续费40),我回去商量了一下,然后再打电话要票他们竟然又涨价到1000,我就不想要了,然后又告诉我明天晚上还有一个位子,晚上8点多的,10点20到武汉,这个还是950,我就要了明天的,反正回去也没有什么事情,老婆竟然责怪我为了省50块钱晚一天回去,为了赶下午的飞机,我还要多请一天半的假,而且手头一点剩下的东西还没有完成呢。
哎,春节实在是不愿回去,回去麻烦回来也麻烦,不过自己在上海过年可能又太冷清了。

Crystal Report的几个问题

我们美国那边做Crystal Report的人走了,所以这个版本中,Crystal Report相关的一些bug就都由我来修改了,很痛苦
在这个过程中深切的感受到Crystal Report的一些问题:

  • 没有比较好的重用机制,特别是一些公式或者Formula以及显示内容的格式,而模版功能还不够强大
  • 子报表不能再包含子报表,这个也很痛苦,在创建复杂的报表内容的时候尤其痛苦,只能通过修改视图解决
  • 从数据库取数据的时候默认是大小写不敏感的
  • RPT文件是二进制格式,不利于版本比较
  • 保存数据库结构信息,例如表的完整定义,如果更新了数据库,那么报表可能不能运行,但是实际上修改对报表没有影响(例如增加了一个表字段)

© 2025 解惑

本主题由Anders Noren提供向上 ↑