在ajax中解决浏览只读取缓存和中文字符乱码问题

前端之家收集整理的这篇文章主要介绍了在ajax中解决浏览只读取缓存和中文字符乱码问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

实现原理:我们把提交到服务器端的URL的地址在每次提交时都让它与上一次不同,大家就会想到时间,这样服务器每次都接收到不同的URL,就不会读取缓存了。

解决中文乱码通常的2种方法

//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();

猜你在找的Ajax相关文章