如果在返回的数据中加上一个计数器。用户没点一次按钮计数器加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;
}
用时间戳去处理缓存的问题还很多类似的 如果验证码。当用户点击看不清换一张的我们也遇到缓存问题用时间戳解决。