关于java接收前台$.ajax格式为多维json数组数据为null的原因及解决方法
来源:互联网 发布:方舟生存进化优化设置 编辑:程序博客网 时间:2024/03/29 14:01
前言
最近在使用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包导入方法可根据自己的编辑器自行百度
0 0
- 关于java接收前台$.ajax格式为多维json数组数据为null的原因及解决方法
- ajax获取json数据为多维数组时,前台js嵌套循环解析
- ajax 前台接收json 为undefined
- Ajax向java后台中传值为数组时,后台接收不到(为null)的问题
- Ajax向java后台中传值为数组时,后台接收不到(为null)的问题
- json格式数据转换为java数组
- java 数组转换为json格式数据
- 前台接收后台传的json,json中value的值为一个数组
- 通过Ajax技术,将数组类型数据转换为JSON格式的对象
- 后台将对象转换为json格式,前台js解析json数据,将字符串转化为数组
- springmvc接收ajax的json格式数据
- Java后台如何接收并处理前台传过来的json格式的数组参数
- 05.Java后台如何接收并处理前台传过来的json格式的数组参数
- Java后台如何接收并处理前台传过来的json格式的数组参数
- Java后台如何接收并处理前台传过来的json格式的数组参数
- ajax上传JSON格式的多维数组的方法
- ajax访问后台,数据放到map中,map明明有值, 前台获取的为null
- 处理$.ajax传递json格式参数,属性为null,undefined,“”
- Hibernate报错:Could not obtain transaction-synchronized Session for current thread
- 友盟自动更新的替换-android开发自动更新
- Makefile的编写
- Html mailto语法
- wifi+定时关机1.0
- 关于java接收前台$.ajax格式为多维json数组数据为null的原因及解决方法
- 对于listview条目item上checkbook点击监听回调更新listview外UI以及对listview外checkbook点击监听itemUI变化
- shell的if else 语句
- ServletConfig对象
- 2016年,年终总结-“人生没有失败”
- Linux 系统下 ftp 服务器的搭建,及文件配置,上传下载等
- Atitit 2016年attilax事业成就表
- visual studio code配置python开发环境的一点心得
- PowerShell 与 JavaScript 的时间起点