赞
踩
axios 是基于Promise 的HTTP客户端,可以在浏览器和node 环境中运行;
在浏览器中发送ajax请求,在node 中发送http请求
特点
安装方式
学习阶段用后两种(在bootCDN 中搜索)
axios({
method: 'GET',
url: 'http://localhost:3000/posts/1',
headers: {
name: 'hello'
},
data: {
msg: 'hi'
}
}).then(response => {
console.log(response);
})
btns[1].onclick = () => { axios.post('http://localhost:3000/comments', { title: 'hi', name: 'hello' }, { // 查询字符串 params: { p: 100 }, query: { b: 200 }, headers: { c: 300 } }) }
axios 请求对象配置信息可以在下面网址中进行查看。
https://github.com/axios/axios/blob/v1.x/README.md#axiosrequestconfig
axios 默认配置:
const btns = document.querySelectorAll('button');
axios.defaults.baseURL = 'http://localhost:3000';
axios.defaults.headers = {name:'hello'};
axios.defaults.params={msg:'hi'}
btns[1].onclick = () => {
axios.post('http://localhost:3000/comments', {
title: 'hi',
name: 'hello'
}, {
query: {
b: 200
},
})
}
const btns = document.querySelectorAll('button'); // 创建axios 实例对象 const test = axios.create({ baseURL: 'http://localhost:3000', timeout: 2000 }) // test和axios 的功能几近一样 test({ url: '/test' }).then(res => { console.log(res); }) test.get('/test').then(res => { console.log(res.data); })
实例对象的好处:
当需要同时向两个或多个服务器端口发送请求,就可以创建多个实例对象进行数据请求。
const test1 = axios.create({
baseURL: 'http://localhost:3000',
timeout: 2000
})
const test2 = axios.create({
baseURL: 'http://localhost:8000',
timeout: 2000
})
一般情况下,如果请求拦截器抛出了错误,那么接下来就会执行相应拦截器的错误回调,再接着执行请求的错误回调。
// 请求拦截器 axios.interceptors.request.use(config => { console.log('请求拦截器成功 1号'); return config },err => { console.log('请求拦截器失败 1号'); return Promise.reject(err) }) // 响应拦截器 axios.interceptors.response.use(response => { console.log('响应拦截器成功 1号'); return response },err => { console.log('响应拦截器失败 1号'); return Promise.reject(err) }) axios({ method: 'GET', url: 'http://localhost:3000/posts' }).then(response => { console.log(response.data); })
拦截器的成功回调中形参是请求体或者响应体,拦截器中也可以对请求体或者响应体进行修改。
axios.interceptors.request.use(config => { console.log('请求拦截器成功 1号'); // config 指的是请求体 拦截其中也可以对请求体做修改 config.params={ name:'hi', msg:'hello' } return config },err => { console.log('请求拦截器失败 1号'); return Promise.reject(err) }) axios.interceptors.response.use(response => { console.log('响应拦截器成功 1号'); return response.data },err => { console.log('响应拦截器失败 1号'); return Promise.reject(err) })
const btns = document.querySelectorAll('button') let isSending = false const controller = new AbortController(); btns[0].onclick = () => { if (isSending) { controller.abort() } isSending = true axios({ method: 'GET', url: 'http://localhost:3000/posts', signal: controller.signal, data: { msg: '响应体数据' } }).then(res => { isSending = false console.log(res.data); }).catch(err => { console.log(err); }) } btns[1].onclick = () => { controller.abort() }
https://github.com/axios/axios
if(utils.isObject(data)){
setContentTypelfUnset(headers,'application/json;charset=utf-8');
return JSON.stringify(data);
}
response.data JSON.parse(response.data)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。