7.ajax

SpringMVC快速的完成ajax功能?

页面:$.ajax( { } );发请求
对于服务器来说,返回json数据

导包:
jackson-annotations-2.8.5.jar,
jackson-core-2.8.5.jar,
jackson-databind-2.8.5.jar,

@ResponseBody响应体
将返回的数据放在响应体
如果返回的是对象,自动将对象转为json格式
	自动注入 employeeDao
	@Autowired
	EmployeeDao employeeDao;
	
	返回的这个集合应该是json格式 
	@ResponseBody
	
	处理器方法处理ajax请求
	@RequestMapping("/getallajax")
	
	public Collection<Employee> ajaxGetAll(){
	
	查询所有员工,直接返回集合(Collection)	
	Collection<Employee> all=employeeDao.getAll();
	return all;
		
	}
	

@JsonFormat

 <script type="text/javascript">


    给这个a标签 $("a:first")  绑定单击事件  .click(function(){ } )
           ${"a:first"}.click(function(){
         
     发送ajax请求获取所有员工 $.ajax ({ })
           $.ajax({
     url:发送的请求地址      
           url:"${ctp}/getallajax",
     type:请求方式    
           type:"GET",
     success:function(){}请求成功以后
           success:function(data){
     $.each(data,function(){}) 遍历data数据,每次遍历干什么  
              $.each(data,function(){
              
              var empInfo = this.lastName+"-->"+this.birth+"-->"+this.gender;
     $("div").append()  每次遍历的数据放在div里面
              $("div").append(empInfo);
              
              });
              
              
              
              
           }
         });
         一点击a标签后,进入到默认行为 return false
          return false;
    
    });

只有表单才有请求体,点链接没有请求体。

@RequestBody请求体,获取一个请求的请求体内容
就不用@RequestParam
@RequestMapping("/testRequestBody")
	public String testRequestBody(@RequestBody String body){
		System.out.println("请求体: "+body);
		return "success";
	}
	
enctype就是encodetype就是编码类型的意思。

multipart/form-data
multipart是指表单数据有多部分构成,
既有文本数据(form),又有文件等二进制数据(data)。
multipart/form-data是将文件以二进制的形式上传
 <form action="${ctp}/testRequestBody" method="post" enctype="multipart/form-data">
         <input name="username" value="tomcat"/>
         <input name="password" value="123456">
         
         <input type="submit"/>
    </form>

图片没在字符集范围的,所以她显示乱码正常的。
文本数据是字符编码的。
在这里插入图片描述
如果想让请求体的内容,封装成自定义类型对象(employee对象)

	@RequestMapping("/testRequestBody")
	public String testRequestBody(@RequestBody Employee employee){
		System.out.println("请求体: "+employee);
		return "success";
	}

会不会整一堆自定义的类型转换器,不用这样做。

@ResopnseBody:可以把返回对象转化为json字符串,放在响应体中
@RequestBody:接收json字符串,封装为自定义对象

1.发送ajax请求

前端发json字符串
通过@RequestBody直接跟自定义类型的对象映射
JSON包 也会把json字符串给转换成自定义类型的对象

<a href="${ctp }/hello">发送ajax请求,请求数据带的是json</a>
  </body>
  <script type="text/javascript">
   $("a:first").click(function(){
          点击发送ajax请求,请求数据带的是json
          前端提交数据的字段名称或者类型和后台的实体类不一致,会报错;
       var emp = {
           lastName : "张三",
           email : "aaa@aa.com",
           gender : 0
           };
        这是json格式吗?这是js对象。js对象转成json串。   
        var  empStr = JSON.stringify(emp);
       $.ajax({
       
          url  : "${ctp}/hello",
          type : "POST",
          data :  empStr,
          data请求带的数据
          contentType : "application/json",
          内容类型是json 
          success:function(data){
             alert(data);
          }
       });
       return false;
   });
  
  </script>

	@RequestMapping("/hello")
	public String testRequestBody(@RequestBody Employee employee){
		System.out.println("请求体: "+employee);
		return "success";
	}
AJAX请求给后台发数据时,有时会报HTTP400错误-请求无效(Badrequest);
出现这个请求无效报错,说明请求没有进入到拦截器,也没有进入到控制器;
本质原因最大几率是出现了数据类型不一致的问题,简单来说是Controller层不能正确读取你发送请求带的参数
具体原因1. 封装失败:前端提交数据的字段名称或者类型和后台的实体类不一致;
具体原因2.前端没有将js对象转化为json字符串类型;前端提交的到后台数据应该是json字符串类型

解决方案:1)对照字段名称,类型保证和实体类一致性
2)前端使用stringify将传递的js对象转化为json字符串data:JSON.stringify(param);

请求体:直接就是json数据,不是以前的key=value&key=value
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值