2 drunkonce DrunkOnce 于 2017.09.17 15:48 提问

为什么我的我用AJAX提交数据到Servlet最后数据始终是乱码??

这是jsp的页面,数据提交到doPost,然后响应到div里面显示,但是 AJAX中的中文数据提交到Servlet 始终是乱码;怎么改啊,大神们。。。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<!-- 引入写了AJAX的js文件  -->
<script type="text/javascript" src="${pageContext.request.contextPath }/AJAXDemo02POST/ajax_posttext.js"></script>

<title>Insert title here</title>
</head>

<body>

    <h1>AJAX  POST获取数据的练习</h1>
    <div style="width:300px;height:200px;border:1px solid red;" id="divajax"></div>
    <input type="button" value="点我获取数据" onclick="ajaxPostText()"/>

</body>
</html>

这是 写了AJAX的js的文件

function ajaxPostText(){
// 创建异步对象:
var xhr = createXMLHttp();
// 设置监听:
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
document.getElementById("divajax").innerHTML = xhr.responseText;
}
}
}

// 打开路径:
xhr.open("POST","/AJAXDemo01/AJAXDemo01Servlet",true);
//这一句没能将提交到post的中文数据编码改掉
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
// 发送请求:
xhr.send("name=张三&pass=密码");

}

function createXMLHttp() {
var xmlHttp;
try { // Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
} catch (e) {
try {// Internet Explorer
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
}
}
}

return xmlHttp;

}

这是Servlet代码

public class AJAXDemo01Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {//未完成
    request.setCharacterEncoding("UTF-8");

    String pass =request.getParameter("pass");
    String name = request.getParameter("name");

    response.setContentType("text/html;charset=UTF-8");
    response.getWriter().println(
            "名称是:" + name + "密码是:" + pass);
    System.out.println("名称是:" + name + "密码是:" + pass);
}

}

图片说明

10个回答

qq_27896387
qq_27896387   2017.09.18 16:56
已采纳

1.检查一下编译环境编码方式 2.检查一下运行环境编码方式 3.打印到控制台检查,Servlet中是否定义编码方式

DrunkOnce
DrunkOnce 工作空间默认编码是GBK的,。。。 改成UTF-8就对了
大约 2 个月之前 回复
weixin_39521929
weixin_39521929   2017.09.17 19:49

request.getParameter()方法在取参数值的时候,首先要进行URL解码(其实就是去掉字符当中的“%“),解码之后将只剩下的字节部分按照Tomcat在内部默认的ISO-8859-1字符集的方式转换成字符串,于是乱码开始在这里出现 了。因为发送过来的字节在去掉%后剩下的字节应该按照UTF-8转换字符串才对,但是却采用了ISO-8859-1,于是乱码产生了。修正加上
String userName=request.getParameter("userName");
userName=new String(userName.getBytes("iso-8859-1"),"UTF-8");再输出
其实,你要的答案在这里 http://www.cnblogs.com/sunxi/p/3849439.html
就不搬运过来了,回答别人的问题也能学到不少,O(∩_∩)O哈哈~

qq_40212465
qq_40212465   2017.09.17 16:50

你才是大神,不是初学啊,我太菜,写的看不懂,jQuery不是很方便吗

ShewMi
ShewMi   2017.09.17 17:39

少了response.setCharacterEncoding("UTF-8");

clumsyCoding
clumsyCoding   2017.09.17 17:50

首先 你看你 控制台 打印的是不是乱码? 如果是的话说明你你传到后台的就是乱码,
那你试试这个
xhr.setRequestHeader("Content-Type","application/text;charset=UTF-8");

qq_22211217
qq_22211217   2017.09.17 21:18

有可能是服务器配置文件里没有设置utf-8 具体在tomcate安装目录\conf\server.xml 用记事本编辑

connectionTimeout="20000" URIEncoding="UTF-8"
redirectPort="8443" />

注意: port="8888" 代表服务器端口号 在标签内增加 URIEncoding="UTF-8"

sky__f
sky__f   2017.09.17 21:47

乱码问题一般都是字符集的锅,检查下两边的字符集是一样的吗

fututadeyoushang
fututadeyoushang   2017.09.17 22:11

前台提交数据统一编码,后台统一解码。

qq_40286498
qq_40286498   2017.09.17 22:18

前台提交数据统一编码,后台统一解码。

privateobject
privateobject   2017.09.18 16:05

图片说明
你看看传到后台的有没有乱码

Csdn user default icon
上传中...
上传图片
插入图片