今天學(xué)習(xí)了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="已經(jīng)存在";
} 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對象向后臺傳送數(shù)據(jù),參數(shù)加在url中。然而問題出現(xiàn)了,我的整個java web項目全部統(tǒng)一編碼為UTF-8,但是中文參數(shù)在后臺還是出現(xiàn)亂碼,經(jīng)過網(wǎng)上查詢后,有一種方法,即對中文進行編碼,使得傳到后臺的參數(shù)沒有中文,然后再后臺進行解碼。
如上所示,在JS代碼中需要對中文參數(shù)進行兩次encodeURL(),那么為什么需要兩次encodeURL()呢?
因為第一次編碼,會將中文編成‘%xy’的格式,在瀏覽器地址欄里,瀏覽器認(rèn)為%是個轉(zhuǎn)義字符,瀏覽器會把%與%之間的編碼,兩位兩位取出后進行解碼,然后再傳遞給處理頁面,如果沒有%,xy是不能解碼為原來的中文,所以必須再次編碼,將‘%’編碼為‘%25’,解碼的時候‘25’就解碼為‘%’,從來還原中文。
以上是客戶端的編碼,需要在服務(wù)器端進行解碼。
String ctype = URLDecoder.decode(request.getParameter("ctype"),"utf-8");
這樣就沒有問題了。