解决缓存问题

如果在返回的数据中加上一个计数器。用户没点一次按钮计数器加1,但往往这种效果在ff游览器中可以实现而在ie中却不能实现,原因是因为,用户每次请求的还是同一个地址传给服务器端的数据没有改变,游览器会把请求来的数据保存到缓存中,当用户再一次请求的游览器就会到缓存中读取所以计数器始终是1。

解决变法是:在请求地址后面加上一个虚拟的时间戳这样游览器每次请求的地址就不一样了。

package com.zchen.ajax.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AJAXServer extends HttpServlet {
	private static final long serialVersionUID = 3611240119854641367L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		try {
			response.setContentType("text/html");
			response.setCharacterEncoding("utf-8");
			PrintWriter out = response.getWriter();
			
			Integer inte = (Integer)request.getSession().getAttribute("total");
			int temp = 0;
			if(inte == null){
				temp = 1;
			}else{
				temp = inte.intValue()+1;
			}
			
			request.getSession().setAttribute("total",String.valueOf(temp));
			
			String old = request.getParameter("name");
			if (old == null || old.length() == 0) {
				out.println("用户名不能为空");
			} else {
				String name = new String(old.getBytes("ISO-8859-1"), "UTF-8");
				if (name.equals("chenzhen")) {
					out.println("用户名[" + name + "]已经存在。"+temp);
				} else {
					out.println("用户名[" + name + "]尚未存在。"+temp);
					out.println("<br/><a href=\'index.jsp\'>返回校验页面</a>");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
 
function verify(){

	var url = "/servlet/AJAXServer?name="+$('#username').val();
	url = convertURL(url);
	$.get(url,null,function(data){$("#result").html(data);});
		
}

//给url地址增加时间戳,骗过游览器,不读取缓存
function convertURL(url){
	//获取时间
	var timestamp = (new Date()).valueOf();
	//将时间戳信息拼凑到url上
	if(url.indexOf("?") >= 0){
		url = url +"&t=" + timestamp;
	}else{
		url = url +"&?=" + timestamp;
	}
	return url;
}

 

用时间戳去处理缓存的问题还很多类似的 如果验证码。当用户点击看不清换一张的我们也遇到缓存问题用时间戳解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值