axios介绍及与后台交互的坑

最近在开发项目的过程中有用到vue.js,在于后台交互的时候会用到axios。在初次使用axios的时候前端封装的数据在controller总是获取不到,在这里总结一下原因及解决办法。

介绍下axios

axios:一个基于primise用于浏览器和Node.js的Http客户端。

特点:支持浏览器和node.js

            支持promise

            能拦截请求和响应

            能转换请求和响应数据

            能取消请求

            自动转换JSON数据

             浏览器支持防止CSRF(跨站请求伪造)

promise:promise是作为异步编程的一种解决方案,比传统的回调函数和事件要合理。promise不会去传递一个回调函数给目标函数,而是让目标函数返回一个promise,来执行对应的事件。

我们采用回调模式实现异步编程时,容易产生回调地狱即在一个回调函数中嵌套多个回调函数,使得代码难以理解和调试.

基本用法:

axios介绍及与后台交互的坑

 

 axios与ajax请求

axios默认请求头:Content-Type: application/json。

ajax默认请求头:Content-Type: application/x-www-form-urlencoded

就是因为这个原因,以前ajax用习惯了,导致我的controller一直接受不到数据

请看我刚开始错误代码:

前台页面请求:

axios介绍及与后台交互的坑

axios介绍及与后台交互的坑

axios介绍及与后台交互的坑

 

可以看到我的请求数据格式是json,后台接受的为0(没有数据默认为0,实际是 1和5),controller中没有获取到数据。

前端解决方案1:

用URLSearchParams来传递参数,注意的是不支持所有的浏览器

axios介绍及与后台交互的坑

 

axios介绍及与后台交互的坑

axios介绍及与后台交互的坑

解决方案2:

引入QS

axios介绍及与后台交互的坑axios介绍及与后台交互的坑

 

axios介绍及与后台交互的坑

 

后端解决方案:

1加注解@RequestBody:用来处理请求体中的json数据。这个就不贴图了