为什么servlet获取不到$.ajax()传过来的数据

_阿坤 2014-08-27 01:04:09
//================JSP代码=================
sentData是测试发送的数据但是在servlet里接收不到,为什么?
<html>
<head>

<title>My JSP 'index.jsp' starting page</title>

<script type="text/javascript">
function _commit() {
var sentData = {"name":"xxx","password":"我不好"};
$.ajax({
url:"${pageContext.request.contextPath}/ParseJsonServlet", //访问路径
type:"POST", //访问方式
data:sentData, //传入服务端的数据
dataType:"json",
contentType:"application/json;charset=utf-8",
success :function() {
$(document.forms[0]).remove();
$("#statuSpan").text("提交成功!");
}
});
}
</script>
<script type="text/javascript" src="js/jquery-1.5.1.js"></script></head>
<body>
<form action="" method="POST">
<input type="text" name="name" value="Jack">
<input type="text" name="description" value="My name is Jack">
<input type="button" value="提交" onclick="_commit()">
</form>
<span id="statuSpan" ></span>
</body>
</html>

//================Servlet代码=================

public class ParseJsonServlet extends HttpServlet {

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

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
System.out.println(request.getParameter("name"));
}

}


...全文
837 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
_阿坤 2014-08-27
  • 打赏
  • 举报
回复
我找到两者解决方法 第一种是将 $.ajax()里的 contentType:"application/json;charset=utf-8", 注释掉 这样就可以通过

    request.setCharacterEncoding("UTF-8");
    System.out.println(request.getParameter("name"));
获取json参数值了 第二种是将sentData加单引号改为var sentData =‘ {"name":"xxx","password":"我不好"}’; 这样可以通过

    	BufferedReader bufr = 
        	new BufferedReader(
        		new InputStreamReader(request.getInputStream(),"UTF-8"));
        StringBuilder sBuilder = new StringBuilder("");
        String temp = "";
        while((temp = bufr.readLine()) != null){
            sBuilder.append(temp);
        }
        bufr.close();
        String json = sBuilder.toString();
        System.out.println(json);
获取参数列表
Go 旅城通票 2014-08-27
  • 打赏
  • 举报
回复
应该是乱码了。。好像java要调用2次encodeURIComponent来编码数据吧。。具体不懂java如何解码了
_阿坤 2014-08-27
  • 打赏
  • 举报
回复
用以下代码可以获取,但中文显示不出来

    	BufferedReader bufr = 
        	new BufferedReader(
        		new InputStreamReader(request.getInputStream(),"UTF-8"));
        StringBuilder sBuilder = new StringBuilder("");
        String temp = "";
        while((temp = bufr.readLine()) != null){
            sBuilder.append(temp);
        }
        bufr.close();
        String json = sBuilder.toString();
        System.out.println(json);
输出结果为:name=xxx&description=%E6%88%91%E4%B8%8D%E5%A5%BD
  • 打赏
  • 举报
回复
试试用FF等调试工具 看看发送到后台的数据长啥样

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧