axios vue 回调函数_vue axios 请求封装

本文介绍了如何在Vue项目中封装axios请求,包括设置基础URL、配置请求头、定义请求超时时间,以及如何添加请求和响应拦截器。提供了两种封装请求的方法,并展示了在main.js中全局绑定以及在组件中调用的方式。
摘要由CSDN通过智能技术生成

将axios 请求封装成公共方法,方面在项目中使用

1.首先在项目引入axios

cnpm i axios --save || npm i --save axios

2.在公共js引入axios

11490bf0ece7

在js中引入axios,引入请求的http链接

3.定义请求头及过期时间

11490bf0ece7

此处设置请求多长时间过期

4.配置请求头

11490bf0ece7

axios如果需要在header里面传参数的化就写在这里

5.请求地址的处理

11490bf0ece7

此处请求地址处理

actionName :接口名

baseURL:为请求的服务端地址

到此处请求的方法就完成了只需要在定义一个公共的方法去处理请求行参就可以

6.定义公共的方法,接收行参调用请求的方法

第一种封装请求方式

11490bf0ece7

第一种方式

reqUrl: 请求地址

reqMethod :请求方式

reqData :请求数据

callback:回调函数

dir :直接返回响应数据(dir  如果存在直接 返回后后台返回的所有数据,不存在则只返回data内的数据)

11490bf0ece7

将请求方法绑定在全局(main.js)

调用方式

11490bf0ece7

绑定到全局后在页面中直接调用,两种方式,只返回data或者返回所有的数据

第二种封装方式

11490bf0ece7

第二种方式

11490bf0ece7

同理绑定到全局

调用方式

11490bf0ece7

调用拿到后台返回的所有的参数进行判断处理

源码放在这里:

import axios from "axios";

let baseURL = 'http://www.baidu.con'

// 创建请求体

const http = axios.create({

timeout: 2000 * 300,

headers: {

"Content-Type": "application/json; charset=utf-8"

}

});

http.__proto__ = axios;

/**

* 请求拦截

*/

http.interceptors.request.use(

config => {

config.headers.sn = "123456";

return config;

},

error => {

return Promise.reject(error);

}

);

/**

* 响应拦截

*/

http.interceptors.response.use(

response => {

if (response.data && response.data.code === 403) {

// 401, 没有权限

} else if (response.data.code === 14003) {} else if (response.data.code && response.data.code !== 200) {

let msg = response.data.msg;

Toast(msg);

}

return response;

},

error => {

return Promise.reject(error);

}

);

/**

* 请求地址处理

*/

http.adornUrl = actionName => {

return baseURL + actionName;

}

/**

* 封装ajax请求

* 1.reqUrl、reqMethod为必填选项

* 2.type存在时导出数据

* @param {String}  reqUrl                  请求地址

* @param {String}  reqMethod                请求方式

* @param {JSON}    reqData                  请求数据

* @param {Function} callback                回调函数

* @param {Function} dir                      直接返回响应数据

*/

// 第一种方式

const myAjax = (reqUrl, reqMethod, reqData, callback, dir) => {

http({

url: http.adornUrl(reqUrl),

method: reqMethod,

data: reqData

})

.then(({ data }) => {

if (dir) {

callback(data);

} else if (data && data.code == 200) {

callback(data.data);

}

})

.catch(({ data }) => {

});

};

// 第二种方式

const myRequest = (reqUrl, reqMethod, reqData) => {

return http.request({

url: http.adornUrl(reqUrl),

method: "post",

data: reqData

});

};

export default {

myAjax,

myRequest

};

/**

*

*  main.js 中如此引用

*

*

* */

Vue.prototype.$myAjax = httpRequest.myAjax; // ajax请求方法

Vue.prototype.$myRequest = httpRequest.myRequest; // ajax请求方法

/**

*

* 第一种封装方式调用请求

*

*

*

* */

this.$myAjax('/api', "post", { name: '参数' }, res => {

});

this.$myAjax('/api', "post", { name: '参数' }, res => {

}, 'res');

/**

*

* 第二种封装方式调用请求

*

*

*

* */

const res2 = await this.$myRequest('/api', 'post', { name: '参数' })

const res0Data2 = res2.data

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值