return " " 2017-09-17 07:48 采纳率: 75%
浏览 1113
已采纳

为什么我的我用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条回答 默认 最新

  • 西安富立叶 2017-09-18 08:56
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加