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

前端代码

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

 <form class="form-horizontal" >
<label for="firstname" class="col-sm-2 control-label">用户ID</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="user_id" placeholder="请输入用户ID">
</div>
<div class="col-sm-offset-2 col-sm-10">
<button type="button" id="select" class="btn btn-default">查找</button>
</div> </form>
<div class="panel-body">
<h2 class="text-danger text-center">
<!-- 用来显示查找结果 -->
<span class="glyphicon" id="select-box"></span>
</h2>
</div>
$(function(){
$("#select").click(function() {
$.ajax({
url : "peopleSelect",
type : "POST",
dataType:"json",
contentType : "application/json;charset=UTF-8",
<!-- 向后端传输的数据 -->
data : JSON.stringify({
id : $("#user_id").val(),
}),
success:function(result) {
<!-- 处理后端返回的数据 -->
var message= JSON.stringify(result);
$("#select-box").html("查询成功" + message);
},
error:function(result){
$("#select-box").html("查询失败");
}
});
});
});

后端代码

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的回调函数,最好将查询结果封装为一个类,每次查询返回这个类,类中包含查询结果或者错误信息。

SSM框架用JSON进行前后端数据传输的更多相关文章

  1. 运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法

    运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法 问题一: SyntaxError: missing ) after argument list in .....\vie ...

  2. Django 前后端数据传输、ajax、分页器

    返回ORM目录 Django ORM 内容目录: 一.MTV与MVC模式 二.多对多表三种创建方式 三.前后端传输数据 四.Ajax ​ 五.批量插入数据 六.自定义分页器 一.MTV与MVC模式 M ...

  3. Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题

    现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...

  4. ajax学习----json,前后端交互,ajax

    json <script> var obj = {"name": "xiaopo","age": 18,"gender ...

  5. Ajax与json在前后端中的细节解惑

    ajax请求JSON Thinkphp中对是否为Ajax的判断,在TP3.2开发手册中有这么一段:“需要注意的是,如果使用的是ThinkAjax或者自己写的Ajax类库的话,需要在表单里面添加一个隐藏 ...

  6. SSM框架下使用websocket实现后端发送消息至前端

    本篇文章本人是根据实际项目需求进行书写的第一版,里面有些内容对大家或许没有用,但是核心代码本人已对其做了红色标注.文章讲解我将从maven坐标.HTML页面.js文件及后端代码一起书写. 一.mave ...

  7. SpringMvc采用 http+json 实现前后端交互

    演示列表 报文表示 一.Json请求和Json响应 实现:Spring4.1.1.RELEASE + jackson2.4.4+JQuery1.10.2 1.pom.xml <propertie ...

  8. Springboot 前后端数据传输 常见误区

    一 content-Type代表的是,传输数据的编码方式 当ajax,JS向后台发起请求的时候,常常会设置content-type,告知服务器前台传输的数据是什么编码方式 1 application/ ...

  9. SSM框架返回json数据

    常见错误:No converter found for return value of type: class .................. 原因分析:这是因为springmvc默认是没有对象 ...

随机推荐

  1. Oracele 11.2.0.3 的一个问题

    最近又在折腾Oracle.由于要用到Oracle spatial对Google投影的空间数据的操作,所以得安装11.2.0.3以上版本的Oracle.但是发现这样的一个问题,当我在64位系统的笔记本上 ...

  2. Android Studio增加assets目录、raw目录

    assets与res/raw不同 assets目录是Android的一种特殊目录,用于放置APP所需的固定文件,且该文件被打包到APK中时,不会被编码到二进制文件. Android还存在一种放置在re ...

  3. create_pascal_tf_record.py 生成的record一直为0字节

    后面发现这个错误原来是自己Main目录下的train.txt中间没东西

  4. 入门servlet:request获取请求头数据

    @WebServlet("/RequestDemo2") public class RequestDemo2 extends HttpServlet { protected voi ...

  5. Luogu P2678 跳石头(二分)

    P2678 跳石头 题意 题目背景 一年一度的"跳石头"比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起 ...

  6. Leetcode400Nth Digit第N个数字

    在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字. 注意: n 是正数且在32为整形范围内 ( n < 231). 示例 1: ...

  7. SELinux安全方式

    一.SElinux配置文件 在CentOS 7系统中部署SELinux非常简单,由于SELinux已经作为模块集成到内核中,默认SELinux已经处于激活状态.对管理员来说,更多的是需要配置与管理SE ...

  8. Python 易错点

    1. Python查找一个变量时会按照“局部作用域”, “嵌套作用域”, “全局作用域”,“内置作用域”的顺序进行搜索. 在实际开发中,我们应该尽量减少对全局变量的使用,因为全局变量的作用域和影响过于 ...

  9. vue项目 安装和配置sass & main.js引入scss文件报错

    通过npm 安装 cnpm install --save-dev sass-loader cnpm install --save-dev node-sass 在build文件夹下的webpack.ba ...

  10. Axure 工具的使用

    Axure RP是一款专业的快速原型设计工具,Axure RP是美国Axure Software Solution公司旗舰产品,是一个专业的快速原型设计工具,让负责定义需求和规格.设计功能和界面的专家 ...