今天学习了Ajax,利用Ajax无刷新检查用户名是否存在,代码如下:
<script type="text/javascript">
function checkCtype() {
var ctype = document.getElementById("ctype").value;
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
if (xmlhttp.responseText == "true") {
document.getElementById("repeat").innerHTML="已经存在";
} else {
document.getElementById("repeat").innerHTML="可以添加";
}
}
}
var url = "/HelloWeb/categoryServlet?status=checkCtype&ctype=" + ctype;
url = encodeURI(url);
url=encodeURI(url);
xmlhttp.open("POST",url,true);
xmlhttp.send();
}
利用XMLHttpRequest对象向后台传送数据,参数加在url中。然而问题出现了,我的整个java web项目全部统一编码为UTF-8,但是中文参数在后台还是出现乱码,经过网上查询后,有一种方法,即对中文进行编码,使得传到后台的参数没有中文,然后再后台进行解码。
如上所示,在JS代码中需要对中文参数进行两次encodeURL(),那么为什么需要两次encodeURL()呢?
因为第一次编码,会将中文编成‘%xy’的格式,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,如果没有%,xy是不能解码为原来的中文,所以必须再次编码,将‘%’编码为‘%25’,解码的时候‘25’就解码为‘%’,从来还原中文。
以上是客户端的编码,需要在服务器端进行解码。
String ctype = URLDecoder.decode(request.getParameter("ctype"),"utf-8");
这样就没有问题了。