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

前言

最近在使用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包导入方法可根据自己的编辑器自行百度

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值