您的位置:首页 > 编程语言 > Java开发

关于java接收前台$.ajax格式为多维json数组数据为null的原因及解决方法

2016-12-30 23:04 1116 查看

前言

最近在使用java接收前台$.ajax数据格式为多维json数组数据时,遇到了一个问题,问题例子如下:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="jquery-1.7.2.js"></script>
<script>
//前台代码如下
$(document).ready(function(){
$('#btn').click(function(){
//obj为多维json数组数据格式
var obj={
name:'key',
age:18,
sex:'男',
info:{
qq:'123456',
email:'123456@qq.com',
girlFriend:{
name:'lucy',
age:18,
sex:'女'
}
}
};
$.ajax({
type:'post',
url:'Test',
data:obj,
dataType:'json',
success:function(data){
console.log(data);
}
});
});
});
</script>
</head>
<body>
<button id="btn">按钮</button>
</body>
</html>


后台java代码如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
System.out.println(request.getParameter("name"));//key
System.out.println(request.getParameter("age"));//18
//一维数据如:name、age、sex等都可以通过request.getParameter获取到,当获取二维数据"info"时却打印为null
System.out.println(request.getParameter("info"));//null
out.flush();
out.close();
}


原因

因为前台ajax的XMLHttpRequest对象send()方法(post方式)发送数据的数据格式应为send(“name=key&age=18&sex=男”),却不能是这样的send(“…sex=男&info={…}”)即(不能为info={…})。但是php却能成功的接收到,而java却为null,这里暂时将原因归咎于java对数据的解析问题,如果有读者知道根本原因还请评论留言给我,感激不尽。

解决方法

前台代码如下:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="jquery-1.7.2.js"></script>
<script>
$(document).ready(function(){
$('#btn').click(function(){
//将多维数据的值设为json格式的字符串
/*var obj={
name:'key',
age:18,
sex:'男',
info:"{qq:'123456',email:'123456@qq.com',girlFriend:{name:'lucy',age:18,sex:'女'}}"
}*/
//或者为这样(可以调用JSON.stringify(jsonObj)转换为字符串),整个用request.getParameter("data")接收
var obj={data:"{name:'key',age:18,sex:'男',info:{qq:'123456',email:'123456@qq.com',girlFriend:{name:'lucy',age:18,sex:'女'}}}"}
$.ajax({
type:'post',
url:'Test',
data:obj,
dataType:'json',
success:function(data){
console.log(data);
}
});
});
});
</script>
</head>
<body>
<button id="btn">按钮</button>
</body>
</html>


后台代码如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/plain;charset=utf-8");
PrintWriter out = response.getWriter();
System.out.println(request.getParameter("data"));
JSONObject strJson = parseStr(request.getParameter("data"));
try {
System.out.println(strJson.getString("name"));//key
System.out.println(strJson.getString("age"));//18
System.out.println(strJson.getString("info"));
//{"email":"123456@qq.com","girlFriend":{"sex":"女","age":18,"name":"lucy"},"qq":"123456"}
out.write(strJson.getString("info"));
} catch (JSONException e) {
e.printStackTrace();
}
out.flush();
out.close();
}

public JSONObject parseStr(String str) {
try {
return new JSONObject(str);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}


其中用到的是:

java的json数据解析jar包[点击下载]

jar包导入方法可根据自己的编辑器自行百度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐