后端程序员的前端必备【Vue】 - 06 axios语法、使用、并发请求、全局配置、拦截器

1 axios介绍

Axios 是一个开源的可以用在浏览器端和 NodeJS 的异步通信框架,她的主要作用就是实现 AJAX 异步通信

由于 Vue.js 是一个 视图层框架 并且作者(尤雨溪)严格准守 SoC (关注度分离原则),所以 Vue.js 并不包含 AJAX 的通信功能,为了解决通信问题,作者单独开发了一个名为 vue-resource 的插件,不过在进入 2.0 版本以后停止了对该插件的维护并推荐了 Axios 框架

2 axios使用

导入axios.js

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

使用axios发送异步请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.min.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <div id="app">
        <button @click="getData1">异步请求获取数据</button>
    </div>
</body>
	<script>
	    new Vue({
	        el:"#app",
	        data:{
	        },
	        methods:{
	        	getData1:function(){
	        		console.log("...")
	        		axios.get('http://localhost:8080/users').then(function(res){
		        		console.log(res);
		        	}).catch(function(){
		        		console.log("请求错误,回调函数")
		        	})
	        	}
	        }
	    })
	</script>
</html>

注意:后端返回的数据中,res.data才是我们需要的数据

3 后端解决跨域问题

方式1:在Controller中添加@CrossOrigin注解

@RestController
@CrossOrigin
@RequestMapping("users")
public class UserController {
    
}

方式2:全局配置

@Configuration
public class MyWebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") //设置可以请求的资源
            .allowedOrigins("http://127.0.0.1:8020") //设置跨域请求的地址
            .allowedHeaders("*") //设置允许携带请求头
            .allowCredentials(true)//设置允许携带cookie
            .allowedMethods("*") //设置允许的请求方式(get\post\put\delete)
            //表示在指定的时间内不再检验跨域
            .exposedHeaders(HttpHeaders.SET_COOKIE).maxAge(3600L);
        
    }
}

4 axios其他请求方式

4.1 指定请求参数

// 为给定 ID 的 user 创建请求
axios.get('/users?id=12345').then(function (res) {
    console.log(res);
}).catch(function (error) {
    console.log(error);
});

// 可选地,上面的请求可以这样做
axios.get('/user', {
    params: {
        id: 12345
    }
}).then(function (res) {
    console.log(res);
}).catch(function (error) {
    console.log(error);
});

4.2 其他请求方式(post、put、delete)

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
}).then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
});

4.3 其他语法

axios.get(url[, config])

axios.delete(url[, config])

axios.post(url[, data[, config]])

axios.put(url[, data[, config]])

5 并发请求

function req1(){
    return axios.get("url1",{
        params:{

        }
    });
}

function req2(){
    return axios.get("url2",{
        params:{

        }
    });
}

axios.all([req1(),req2()]).then(axios.spread(function (res1, res2) {
    // 两个请求现在都执行完成
}));

6 axios全局配置

//axios全局配置
axios.defaults.timeout = 10000;   // 超时时间
axios.defaults.baseURL = "http://localhost:8080/";  // baseURL

7 axios-拦截器

7.1 请求拦截器

 //定义axios的拦截器
axios.interceptors.request.use(function(config){
    console.log("===已拦截axios请求===") 
    //axios请求信息
    console.log(config)
    //未来可以在请求头中存放token信息用于身份校验等。

    //一定要记得返回这个对象否则请求不会发出!!!
    return config;
})

7.2 响应拦截器

//定义axios的响应拦截器
axios.interceptors.response.use(function(response){
    //response表示服务器响应数据信息
    
    //获取到后端返回的数据。一定要记得返回response对象
	return response.data;
})
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yinying293

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值