SpringMVC返回JSON数据的坑

测试一:


@RequestMapping(value = "/test1", method = RequestMethod.POST)
    @ResponseBody
    public Person test1() {
        Person person = new Person();
        person.setName("熙雅");
        person.setAge(24);
        person.setBirth(new Date());
        person.setId(1);
        person.setEmail("lgh1992314@qq.com");
        return person;
    }
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="static/js/jquery-3.2.1.min.js"></script>
    <title>学习</title>
    <script>
        $(function () {
          $.post("http://localhost:8080/SSMCRUD/test1", function(data) {
//                data = eval("(" + data+ ")");
                $('#name').val(data.name);
                $('#age').val(data.age);
            });
        });
    </script>
</head>
<body>
<input type="text" id="name"/>
<input type="text" id="age"/>
</body>
</html>

当返回对象时,我们不需要使用 eval()来将json字符串转化为javascript对象。
测试1

如上图所示,返回的是标准的json字符串格式。

测试二

@RequestMapping(value = "/test1", method = RequestMethod.POST)
    @ResponseBody
    public String test1() {
        Person person = new Person();
        person.setName("熙雅");
        person.setAge(24);
        person.setBirth(new Date());
        person.setId(1);
        person.setEmail("lgh1992314@qq.com");
        String json = com.alibaba.fastjson.JSON.toJSONString(person);
        System.out.println(json);
        return json;
//      return "{\"name\":\"熙雅\",\"age\":24}";
    }

此时,返回的json字符串的格式:

“{\”age\”:24,\”birth\”:1499759417522,\”email\”:\”lgh1992314@qq.com\”,\”id\”:1,\”name\”:\”熙雅\”}”

所以需要eval()函数解析:

<script>
        $(function () {
            $.post("http://localhost:8080/SSMCRUD/test1", function(data) {
                data = eval("(" + data+ ")");
                $('#name').val(data.name);
                $('#age').val(data.age);
            });
        });
    </script>

data = eval(“(” + data+ “)”);

为什么eval这里要括号?
由于json是以{ }的方式来开始以及结束的,在eval中会被当成一个语句块来处理,故必须强制将它转换成一种表达式。
加上圆括号是使eval函数在处理时强制将括号内的表达式(expression)转化为对象而不作为语句(statement)来执行。

alert(eval(“{}”));//undefined
alert(eval(“({})”));//[Object,Object]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N3verL4nd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值