原生javascript发送异步请求
<!-- href="javascript:void(0);"
让超链接去执行一个js函数,而不是去跳转到一个地址,
而void(0)表示一个空的方法,也就是不执行js函数。
如果写href="#" 则页面会回到顶部-->
<a href="javascript:void(0);" id="testAjax">访问controller</a>
<script type="text/javascript" src="/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
$(function(){
//为id="testAjax"的组件绑定点击事件
$("#testAjax").click(function(){
//发送异步请求
$.ajax({
type:"POST",//请求方式
url:"ajaxController",//请求地址
data:'ajax message',//请求参数(也就是请求内容)
dataType:"text",//响应正文类型
contentType:"application/text"//请求正文的MIME类型
});
});
});
</script>
接受异步请求参数
- @ResquestBoby:可以将异步提交的数据组织成标准请求参数格式,并赋值给形参
@RequestMapping("/ajax")
public String ajax(@RequestBody String message){
System.out.println(message);
return "page.jsp";
}
- 注解添加到Pojo参数前方时,封装的异步提交数据按照Pojo的属性格式进行关系映射
@RequestMapping("/ajaxPojoToController")
//如果处理参数是POJO,且页面发送的请求数据格式与POJO中的属性对应,@RequestBody注解可以自动映射对应请求数据到POJO中
//注意:POJO中的属性如果请求数据中没有,属性值为null,POJO中没有的属性如果请求数据中有,不进行映射
public String ajaxPojoToController(@RequestBody User user){
System.out.println("controller pojo :"+user);
return "page.jsp";
}
- 注解添加到集合参数前方时,封装的异步提交数据按照集合的存储结构进行关系映射
@RequestMapping("/ajaxListToController")
//如果处理参数是List集合且封装了POJO,且页面发送的数据是JSON格式的对象数组,数据将自动映射到集合参数中
public String ajaxListToController(@RequestBody List<User> userList){
System.out.println("controller list :"+userList);
return "page.jsp";
}
异步请求接受响应数据
- 方法返回值为Pojo时,自动封装数据成json对象数据
@RequestMapping("ajax4")
@ResponseBoby
public User ajax4(){
User user = new User();
user.setName("Jock");
user.setAge(40);
return user;
}
- 方法返回值为List时,自动封装数据成json对象数组数据
@RequestMapping("/ajax5")
@RequestBoby
public List ajax5(){
User user = new User();
user.setName("Tom");
user.setAge(3);
User user1 = new User();
user1.setName("jerry");
user1.setAge(2);
ArrayList al = new ArrayList();
al.add(user);
al.add(user1);
return al;
}