日期:2014-05-16  浏览次数:20656 次

ajax 中使用servlet但不执行解决方法
方法一:
xmlHttp.open("GET", "default.aspx?param="+Math.random(), true);
或者
xmlHttp.open("GET", "default.aspx?param="+new Date().getTime(), true);
方法二:
xmlHttp.open("GET", "default.aspx", true);
xmlHttp.setRequestHeader("If-Modified-Since","0");
xmlHttp.send(null);
建议使用方法二

经过分析问题出在XmlHttpRequest这个对象上面,切换选项后,并不是每次走到请求页面的逻辑中。查询了相关资料解决方案如下:

request.setRequestHeader("If-Modified-Since","0");


简单的说,Last-Modified 与If-Modified-Since 都是用于记录页面最后修改时间的 HTTP 头信息,只是 Last-Modified 是由服务器往客户端发送的 HTTP 头,而 If-Modified-Since 则是由客户端往服务器发送的头,可 以看到,再次请求本地存在的 cache 页面时,客户端会通过 If-Modified-Since 头将先前服务器端发过来的 Last-Modified 最后修改时间戳发送回去,这是为了让服务器端进行验证,通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回新的内容,如果是最新的,则 返回 304 告诉客户端其本地 cache 的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担。



另外还有另一个解决放案,经测试,理论也是可行的,就是在请求页面设置一下response的header:

       Response.AddHeader("Cache-control", "no-cache");

从服务端设置Header,其默认值为"private"修改为"no-cache"将实现,每次发送请求都会去服务端走一次