ajax用post提交中文乱码问题(待补充)

来源:互联网 发布:如何申请顶级域名 编辑:程序博客网 时间:2024/06/05 02:17

主要问题是在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();
}


0 0