您的位置:首页 > 其它

web开发中客户端脚本产生的浏览器缓存问题

2009-10-09 20:10 288 查看
国庆假之前,写了一个监控系统的参数配置系统,其中用到了ajax和服务器做异步请求。在我的机器和公司测试服务器测试时,一切正常,等发布到客户的服务器之后,发现后台server有时接收不到javascript脚本发送的ajax请求,使配置动作常常失效,但浏览器页面也没有错误报告。当天已经是9月30号了,客户那边的浏览器又是IE7,不能在本地调试,只好一遍遍的在公司用Firefox和fireBug调,搞了半个晚上也没查出原因,心情很郁闷,国庆长假期间有时候也会因为这个问题烦恼好几秒。

今天上班后继续查错,还是查不到~~~一边想着微软害死人一边鼓捣,偶尔发现如果将IE配置为“每次访问网页时检查所存网页的较新版本”,问题就解决了!心情有点激动,想到这应该和ajax请求产生的浏览器缓存有关,上网google了一把“ajax 缓存”果然如此,:),设置了XMLHttpRequest的header之后,无论IE的配置如何,ajax请求都能正确得到server响应。

原以为万事大吉了,可下午在做监控系统的flex表现层时,又出现了同样的问题。用flex的HttpService组件发送的请求在IE下又会产生缓存,使数据不能及时更新,可恶,又不能让每个客户都去更改IE配置,只能又google了一把“flex HttpService 缓存”,在网上前辈们留下的秘藉的帮助下,增加了一个时间戳参数后问题得到了解决。这个过程有一点小曲折,我的HttpService组件是用<mx:request>附加请求参数的,如果直接更改其url,向其中添加新参数的话就显得有点混乱了,所以我在<mx:request>中嵌套了一句:<t>{new Date().toString()}</t>,结果在server端检查参数时发现每次请求,参数t表示的时间点都相同,我想飚个血~~~咋办呢?想了想,声明了一个Data类型的变量date:[Bindable] date:Date,并将参数t修改为:<t>{date.toString()}</t>,然后在每个send之前,来一句:date = new Date(),就这样,我欢乐了。

最后说一下,通过设置ajax的header使请求不产生缓存的代码是:
[requestObjectName].setRequestHeader("If-Modified-Since","0");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: