zoukankan      html  css  js  c++  java
  • SSM框架用JSON进行前后端数据传输

     

    一个根据用户id查找用户信息的简单功能,使用JSON进行数据的传输

    前端代码

    这里用bootstrap做简单的样式美化,中间留了个div用来异步的显示查询结果,ajax进行前端的数据传输(class内容可以无视,只有美化效果):

     1 <form class="form-horizontal" >
     2     <label for="firstname" class="col-sm-2 control-label">用户ID</label>
     3     <div class="col-sm-10">
     4       <input type="text" class="form-control" id="user_id" placeholder="请输入用户ID">
     5     </div>
     6     <div class="col-sm-offset-2 col-sm-10">
     7       <button type="button" id="select" class="btn btn-default">查找</button>
     8     </div>
     9 
    10 </form>
    11 <div class="panel-body">
    12     <h2 class="text-danger text-center">
    13         <!-- 用来显示查找结果 -->
    14         <span class="glyphicon" id="select-box"></span>
    15     </h2>
    16 </div>
    17 $(function(){
    18 $("#select").click(function() {
    19             $.ajax({
    20                 url : "peopleSelect",
    21                 type : "POST",
    22                 dataType:"json",
    23                 contentType : "application/json;charset=UTF-8",
    24                 <!-- 向后端传输的数据 -->
    25                 data : JSON.stringify({
    26                     id : $("#user_id").val(),
    27                 }),
    28                 success:function(result) {
    29                     <!-- 处理后端返回的数据 -->
    30                     var message= JSON.stringify(result);
    31                     $("#select-box").html("查询成功" + message);
    32                 },
    33                 error:function(result){
    34                     $("#select-box").html("查询失败");
    35                 }
    36             });
    37         });
    38 });

    后端代码

    Controller

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

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

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

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

    最后说几个遇到的问题:

    一.点击查找按钮后,页面会快速刷新,看不到返回结果

    提交按钮的type一定要设置为button,不要使用submit,因为submit会默认点击提交,而ajax也会提交,这就产生了ajax的返回结果还没看清就因为submit的提交而刷新了页面。

    二.后台查询结果没问题,却总是调用ajax的error回调函数

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

  • 相关阅读:
    jQuery源码 support
    jQuery 源码: 延迟对象补充。
    web FG interview all
    Img load
    浅谈js中this指向问题
    浅谈ES6原生Promise
    BootStrap的两种模态框方式
    让div盒子相对父盒子垂直居中的几种方法
    normalize与reset
    JS实现继承的方式
  • 原文地址:https://www.cnblogs.com/lizhen-home/p/7472865.html
Copyright © 2011-2022 走看看