ajax 可以实现异步请求,在一个web页面不同步刷新的情况下,对服务器发送请求获取到资源,动态展示在页面。
而为了让前端去识别服务器发送的数据,我们需要将数据转换成 .json 格式的 发送。
使用到的注解:
- @ResponseBody 将返回的数据存放到响应体中
- @JsonIgnore 当对象转换成json格式时,忽略该字段。 某些字段不想让别人知道 可以在字段上用该注解标识
SpringMVC 处理ajax请求:
1. Controller处理方法要将对象 转换成 .json 格式 ,需要使用到 jackson 类库。导入以下依赖
<!-- jackson 包 :用于将对象 转换成 json格式的数据 -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
maven内部会自动导入相关联的 jackson 包
2. 编写Controller 处理方法
// 用ajax 来获取全部的员工 的数据
@RequestMapping("/getEmpsAjax")
@ResponseBody
public Collection<Employee> getEmps() {
return empDao.getEmps(); //调用Dao层从数据库获取所有的员工对象
}
PS: @ResponseBody 该注解的作用是: 将返回的数据存放到响应体中 ,
(如果 响应的是对象类型的数据,jackson 包自动将对象转换成json格式)
注意:目标方法加上了 @ResponseBody 注解, 该方法的返回值(不管是什么返回值) ,则不会被解析成视图,而是直接显示在响应体中
如果某个对象的属性不想被转换成json格式的 不想被 前端可见,可以加上注解:@JsonIgnore
例如:
public class Employee { private Integer id; //员工的id 不能修改 private String name; private String sex; private Integer age; @JsonIgnore //当对象转换成json格式时,忽略该字段 private Dept dept; ............... }
编写前端页面 发送 ajax请求
jsp 页面:
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引入 jquery -->
<script type="text/javascript" src="${pageContext.request.contextPath }/jq/jquery-2.1.4.js"></script>
<script type="text/javascript">
$(function(){
//单击action触发 事件,发送ajax请求获取到所有的 emp 对象 ,展示在页面
$("#action").click(function(){
//发送 ajax请求,获取所有的 emp 员工
$.ajax({
//请求地址 ,项目名可以使用 EL 表达式 获取
url:"${pageContext.request.contextPath}/getEmpsAjax",
type:"get",
//定义请求成功后的处理
success :function(data){
//遍历从服务器响应过来的资源
data.forEach(function(val,index){
var emp = "员工姓名:"+val.name+"员工年龄:"+val.age;
$("#show").append(emp+"<br/>");
});
}
})
});
});
</script>
</head>
<body>
<div id="action" style="width:100px;border:1px solid red">获取员工</div>
<div id="show"></div>
</body>
客户端访问:
1.访问 jsp页面:http://localhost:8080/springMvcCrud/ajaxDemo.jsp
2.点击 div 获取员工: