您的位置:首页 > 其它

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

2015-04-04 15:58 260 查看
主要问题是在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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: