springMVC下使用ajax进行前后端JSON数据交互

前端js

  <%-- 引入JQ --%>
    <script src="static/js/jquery.min.js"></script>
    <script type="text/javascript">

        function sendEmail() {
            var nickname = $("#name").val();
            var sender = $("#email").val();
            var subject = $("#phone").val();
            var message = $("#message").val();
            var auth = $("#auth").val();

            var url = "sendEmail";
            var email = {
                nickname: nickname,
                sender: sender,
                subject: subject,
                message: message,
                auth: auth
            };

            $.ajax({
                url: url,
                contentType: "application/json",
                type: "POST",
                data: JSON.stringify(email),
                dataType: "JSON",
                success: function (result) {
                    if (result === true) {
                        alert("邮件发送成功,博主将在24小时内回复!");
                        window.location.href = "contact";
                    } else {
                        alert("邮件发送失败!");
                        window.location.href = "contact";
                    }
                }
            })
        }

    </script>

前后段不太对的上,但是意思表达清楚了,有js和springMVC相关知识应该可以看懂0.0

后端代码

Controller

这里主要用@RequestBody转换接受的JSON为对象,用@ResponseBody转换返回的对象为JSON。
有两种接受前端数据的方式,一种使用Map接受,一种使用实体类进行接收,使用Map接受的方法为:

@RequestMapping("/peopleSelect")
    @ResponseBody
    public People peopleSelect(@RequestBody Map<String,String> map) {
        //使用map.get方法得到JSON中id对应的值
        long id = Long.parseLong(map.get("id"));
        //查找对应id的用户信息
        People people = peopleService.getById(id);
        //返回用户信息,要使用@ResponseBody将返回值转换为JSON
        return people;
    }

使用实体类接受的话,要求实体类中有对应的属性,如People中有id,name,age属性,只能接受键名为id,name,age的JSON(可以不全有,但不能有People中没有的属性),方法为:

@RequestMapping("/peopleSelect")
    @ResponseBody
    public People peopleSelect(@RequestBody People requestPeople ) {
        //使用requestPeople.getId方法得到JSON中id对应的值
        long id = requestPeople.getId();
        //查找对应id的用户信息
        People people = peopleService.getById(id);
        //返回用户信息,要使用@ResponseBody将返回值转换为JSON
        return people;
    }

最后说几个遇到的问题:
一.点击查找按钮后,页面会快速刷新,看不到返回结果
提交按钮的type一定要设置为button,不要使用submit,因为submit会默认点击提交,而ajax也会提交,这就产生了ajax的返回结果还没看清就因为submit的提交而刷新了页面。

二.后台查询结果没问题,却总是调用ajax的error回调函数
ajax对返回数据的要求很严格,一定要是严格的JSON数据返回才会进行success的回调,只要有一条数据不是严格的JSON格式就会调用error的回调函数,最好将查询结果封装为一个类,每次查询返回这个类,类中包含查询结果或者错误信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜鸟猫喵喵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值