实现原理:我们把提交到服务器端的URL的地址在每次提交时都让它与上一次不同,大家就会想到时间,这样服务器每次都接收到不同的URL,就不会读取缓存了。
//1.页面端发出的数据做一次encodeURI,服务器端使用new String(name.getBytes("iso8859-1"),"UTF-8");
//2.页面段发出的数据作两次encodeURI,服务器端使用RLDecoder.decode(nameStr,"UTF-8");
<script type="text/javascript" src="js/jquery-1.4.js"></script>
<script type="text/javascript">
function testClick(){
var obj = $("#name");
var name = obj.val();
var url = "testServlet?name="+encodeURI(encodeURI(name)); //解决提交的数据乱码问题
url = convertURL(url);
//alert(url);
$.get(url,true,callback);
}
//给URL地址增加时间戳,骗过浏览器,不读取缓存
function convertURL(url){
//获取时间戳
var tiMetamp = (new Date()).valueOf();
//将时间戳信息拼接到URL地址上面去
//url = "testServlet";
if(url.indexOf("?")>=0){
url = url + "&t="+tiMetamp;
}else{
url = url + "?t="+tiMetamp;
}
return url;
}
function callback(data){
//alert("服务器的数据回来了!");
$("#msg").html(data);
}
</script>
<input id="name" ><input type="button" value="测试" onclick="testClick()"/>
<br/><div id="msg"></div>
下面是服务器端:
response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); //定义变量,存储连续请求的次数 Integer inte = (Integer)request.getSession().getAttribute("total"); int temp =0; if(inte==null){ temp = 1; }else{ temp = inte.intValue()+1; } request.getSession().setAttribute("total",temp); String nameStr = request.getParameter("name"); //String name = new String(nameStr.getBytes("iso8859-1"),"UTF-8"); String name = URLDecoder.decode(nameStr,"UTF-8"); PrintWriter out = response.getWriter(); if(name==null || name.length()==0){ out.print("用户名为空"+temp); }else{ if(name.equals("peter")){ out.print("用户名"+name+"正确"+temp); }else{ out.print("用户名"+name+"错误"+temp); } } out.flush(); out.close();
原文链接:https://www.f2er.com/ajax/165759.html