1. 程式人生 > >ajax用post提交中文亂碼問題(待補充)

ajax用post提交中文亂碼問題(待補充)

主要問題是在jsp頁面,需要ajax提交資料到後臺,但在資料傳到後臺接收後輸出亂碼,主要解決辦法:在jsp頁面用到接收中encodeURI或者escape方法進行編碼。jsp頁面程式碼如下:

(部分js):

<script>

var xmlHttp;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}

}

function sub(){

var type = document.getElementById("type");//從頁面獲得的中文變數

alert(type.value);
//將訂單資訊提交到後臺,驗證是否可以預定
createXMLHttpRequest();
var url = "OrderCanServlet";
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHttp.onreadystatechange = callback;
xmlHttp.send("type=" + encodeURI(encodeURI(type.value)));//注意!!!用了兩次encodeURI!!!
//alert("提交成功");

}

function callback() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
alert(xmlHttp.responseXML);
var message = xmlHttp.responseXML.getElementsByTagName("message")[0].firstChild.data;
setMessage(message);
}
}
}

function setMessage(message) {
alert(message);
}

</script>

後臺servlet接收後需要對資料進行解碼,如果單純的用request.getParameter("type")解碼一次顯然是不行的,因為前臺進行了兩次編碼,所以用到java.net.URLDecoder.decode();程式碼如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


response.setContentType("text/xml;charset=UTF-8");
PrintWriter out = response.getWriter();

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

System.out.println(java.net.URLDecoder.decode(request.getParameter("type"), "UTF-8"));//兩次解碼!!!!

String message = "200";

response.setHeader("Cache-Control", "no-cache");

out.println("<?xml version='1.0' encoding='" + "UTF-8" + "'?>");
out.println("<response>");
out.println("<message>" + message + "</message>");
out.println("</response>");

out.flush();
out.close();
}