关于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包导入方法可根据自己的编辑器自行百度
相关文章推荐
- Ajax向后台传json格式的数据出现415错误的原因分析及解决方法
- 关于SpringBoot自定义注解(解决post接收String参数 null(前台传递json格式))
- $.ajax返回的JSON格式的数据后无法执行success的解决方法
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- Java后台如何接收并处理前台传过来的json格式的数组参数
- jQuery通过ajax方法获取json数据不执行success的原因及解决方法
- Java中使用json与前台Ajax数据交互的方法
- $.ajax返回的JSON格式的数据后无法执行success的解决方法
- 05.Java后台如何接收并处理前台传过来的json格式的数组参数
- $.ajax返回的JSON格式的数据后无法执行success的解决方法
- ajax获取json数据为多维数组时,前台js嵌套循环解析
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- gson转JSON数据 报错java.lang.NullPointerException的解决方法
- FireFox中使用JQuery的ajaxfileupload插件返回JSON格式数据提示保存的解决方法。
- $.ajax返回的JSON格式的数据后无法执行success的解决方法
- Java后台如何接收并处理前台传过来的json格式的数组参数
- Ajax核心XMLHttpRequest对象、(发送请求、接收)方法和属性介绍、AJAX开发框架、数据格式提要(XML、JSON、HTML)
- $.ajax返回的JSON格式的数据后无法执行success的解决方法
- 关于java 发送http json数据格式请求时,服务器端如何接收json数据并解析
- $.ajax返回的JSON格式的数据后无法执行success的解决方法