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

ajax缓存解决有1,2,3种办法
1、加个随机数 ASP随机函数
xmlHttp.open("GET", "ajax.asp?now=" + new Date().getTime(), true);

2、在要异步获取的asp页面中写一段禁止缓存的代码:
Response.Buffer =True
Response.ExpiresAbsolute =Now() - 1
Response.Expires=0
Response.CacheControl="no-cache"

3、在ajax发送请求前加上xmlHTTP.setRequestHeader("If-Modified-Since","0");可以禁止缓存
xmlHTTP.open("get", URL, true);
xmlHTTP.onreadystatechange = callHTML;
xmlHTTP.setRequestHeader("If-Modified-Since","0");
xmlHTTP.send();

Web 开发中的缓存问题

HttpServlet 类为 If-Modified-Since 请求头和 Last-Modified 头字段的这种应用提供了处理机制,当继承了 HttpServlet 类的 Servlet 程序接收到一个 GET 方式的访问请求时,HttpServlet 中重载的 service 方法在调用 doGet 方法之前,它还将调用 getLastModified 方法,并根据 getLastModified 方法的返回值来决定是否调用 doGet 方法和在响应消息中是否生成 Last-Modified 头字段,具体规则如下:

当 getLastModified 方法返回一个负数时,不管请求消息中的情况怎样,service 方法都将直接调用 doGet 方法来生成响应内容,这正是 HTTPServlet 类中定义的 getLastModified 方法的行为;
当 getLastModified 方法返回一个正数,且请求消息中没有包含 If-Modified-Since 请求头时(这往往出现在第对某个资源的第一次访问时),或者请求消息中包含的If-Modified-Since 请求头中的时间值比 getLastModified 方法返回的时间值旧时,service 方法将根据 getLastModified 方法的返回值生成一个 Last-Modified 头字段,然后调用 doGet 方法生成响应内容;
当 getLastModified 方法返回一个正数时,且请求消息中包含的 If-Modified-Since 请求头中的时间值比 getLastModified 方法返回的时间值新或者与之相同时,service 方法将不调用 doGet 方法,而是向浏览器返回一个304(Not Modified)状态码表示浏览器可以使用其以前缓存的内容。