前言
主要用于实现AJAX异步通信功能;axios可以在浏览器中发送XMLHttpRequests请求,可以在nodejs中发送http请求,还可以拦截请求和响应、转换请求和响应数据
步骤一,安装
npm install --save axios vue-axios
步骤二,main.js入口文件
import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios, axios)
步骤三,请求接口方式
this.$http.get('http:xxxx/xxx').then((response) => {
console.log(response.data);
});
Vue.axios.get(api).then((response) => {
console.log(response.data)
})
this.axios.get(api).then((response) => {
console.log(response.data)
})
Get请求
const axios = require('axios');
axios.get('http/xxxx')
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})
.then(function () {
});
axios.get('http/xxxx', {
params: {
ID: 12345
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})
.then(function () {
});
get请求-效果图,params是添加到url的请求字符串中的
POST请求
axios({
method: 'post',
url: 'http/xxx',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
});
post请求-效果图,而data是添加到请求体(body)中的
请求配置
配置各项参数效果和作用
const axios = require('axios');
const qs = require('qs');
axios({
method: 'post',
url: 'sys/industry/querylist',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
},
baseURL: 'http://xxxxxx/epidemic_prevention/',
transformRequest: [function (data, headers) {
data.max = "新增"
return qs.stringify(data);
}],
transformResponse: [function (data) {
return data;
}],
headers: {'X-Requested-With': 'XMLHttpRequest'},
params: {
ID: 12345
},
timeout: 1000,
});
transformRequestt-效果图
使用自定义请求头headers-效果图,通常传个token
params效果图,用于给地址后面传递参数-图示
qs库的引入(使用到的时候再引)
对发送或者收到的 data 进行任意转换处理(常用于 post请求的data数据进行加密处理)
transformRequest: [function (data, headers) {
return qs.stringify(data);
}],
qs.stringify({ a: ['b', 'c', 'd'] });
qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false });
qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })
qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })
qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })
注意:需要注意的是,JSON中同样存在stringify方法,但是两者之间的区别是很明显的
import qs from 'qs';
let url ={
firstName: 'Fred',
lastName: 'Flintstone'
}
console.log(qs.stringify(data))
console.log(qs.parse(url));
正常业务流程-请求封装
新建 request.js
import axios from 'axios'
export const instance = axios.create({
baseURL: 'http://xxxxx.cn',
})
axios.interceptors.request.use(function (config) {
return config;
}, function (error) {
return Promise.reject(error);
});
instance.interceptors.response.use(function (response) {
return response.data;
}, function (error) {
return Promise.reject(error);
});
export default (url, method, submitData) => {
return instance({
url,
method,
[method.toLowerCase() === 'get' ? 'params' : 'data']: submitData,
headers: {
'token': localStorage.getItem("token") || ""
},
})
}
二次封装
新建 api.js
import request from '@/utils/request'
export const Index = (data) => {
return request('/api/index/index', 'get',data)
}
页面使用
methods:{
async Index() {
try {
const {data:res} = await Index();
console.log(res.data.case_list);
} catch (err) {
uni.showToast({
title: err,
icon: "none",
});
}
},
async Index() {
try {
const res = await Index();
console.log(res.data.case_list);
} catch (err) {
this.$message.error({
title: "获取失败",
message: "获取失败",
type: "none",
duration: 2000,
});
}
},
}
|