axios学习笔记

208 阅读3分钟

axios学习笔记

1.axios和ajax,fetch的区别

ajax:是在不重新加载页面的情况下,与服务器交换数据并更新部分网页,本身是针对MVC的编程,不符合现在前端MVVM的浪潮。
$.ajax({

  type: 'POST',

  url: url,

  data: data,

  dataType: dataType,

  success: function () {},

  error: function () {}

});


fetch:是ajax的替代品,但fetch不是ajax的进一步封装,而是原生js,没有使用XMLHttpRequest对象,fetch是基于promise设计的,代码结构比ajax简单多了。
优势:
1.语法简洁,更加语义化
2.基于标准 Promise 实现,支持 async/await
3.同构方便,使用 isomorphic-fetch
4.更加底层,提供的API丰富(request, response)
5.脱离了XHR

// 通过fetch获取百度的错误提示页面 get
fetch('https://www.baidu.com/search/error.html', {
    method: 'GET'
  })
  .then((res)=>{
    return res.text()  // res.json();
  })
  .then((res)=>{
    console.log(res)
  })
 // 通过fetch获取百度的错误提示页面 post
fetch('https://www.baidu.com/search/error.html', {
    method: 'POST',
    body: new URLSearchParams([["foo", 1],["bar", 2]]).toString() // 这里是请求对象
  })
  .then((res)=>{
    return res.text()
  })
  .then((res)=>{
    console.log(res)
  })
  
  
  Axios:是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
  优势:
  1.从浏览器中创建 XMLHttpRequest
  2.支持 Promise API
  3.客户端支持防止CSRF
  4.提供了一些并发请求的接口
  5.从 node.js 创建 http 请求
  6.拦截请求和响应
  7.转换请求和响应数据
  8.取消请求
  9.自动转换JSON数据
  10.客户端支持防御 XSRF
  axios({
    method: 'post',
    url: '/user/12345',
    data: {
        firstName: 'Fred',
        lastName: 'Flintstone'
    }
})
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});

2.axios的基本使用

get:获取数据

post:提交数据(表单提交及文件上传)

put:更新数据(提交所有数据)

patch:提交数据(提交修改的数据)

delete:删除数据

get使用

axios({
    method: 'get',
    url: '',
    params: {}
}).then(res => {console.log('get使用')})
或者写成
axios.get(url,params).then(res => {console.log('get使用')})

post使用(patch用法类似)

post的请求头有一个content-type,该字段有两个值,一为form-data,一般用于表单提交(文件上传、图片上传等);二为application/json,即传递json数据。
axios({
    method: 'POST',
    url: '',
    data: {}
}).then(res => {console.log('post使用')})
或者写成
axios.post(url,data).then(res => {console.log('post使用')})

delete使用

axios({
	method: 'DELETE',
	url: '',
	params: {}
}).then(res => {console.log('delete使用')}

3.并发请求

同时进行多个请求,并统一处理返回值,在进行业务处理时如果遇到需要同时依赖两个接口返回的数据,此时可以使用并发处理。

axios.all([
    axios.get('url1'),
    axios.post('url2')
]).then(
	axios.spread((res1,res2) => {
        console.log(res1,res2)
    }) //用spread来分割返回值
)

4.axios深入学习

1)创建axios实例

//axios实例化
let api = axios.create({
    baseURL: 'localhost:8080', //请求的域名
    timeout: 3000, //设置请求时长
    method: 'get,post',
    headers: { //设置请求头
        token: ''
    },
    params: {},
    data: {}
})
//使用axios实例
api.get('/data.json')

2)axios配置

全局配置:如axios.defaults.timeout = 3000;

实例配置:创建axios实例时传入的配置,默认会使用全局配置;

请求配置:使用axios请求时,单独引入的配置。

优先级:请求配置 > 实例配置 > 全局配置

3)axios拦截器

请求拦截器:

axios.interceptors.request.use(
	config => {}, //发送请求前的一些处理逻辑
    err => {} //请求错误之后的处理
)

响应拦截器:

axios.interceptors.response.use(
	res => {return res}, //请求成功之后对响应数据的处理
    err => {return err} //响应错误后的处理
)

4)axios错误处理

axios.get('/data.json')
    .then(callback)
    .catch(err => {
    console.log(err)
})

5)axios取消http请求

let api = axios.create({})  //实例化axios
let source = axios.CancelToken.source() //实例化一个source对象

api.get('/data.json',{
    cancelToken: source.token //请求时携带cancelToken
}).then(callback).catch(err => {
    console.log(err)
})

source.cancel('message') //调用source的cancel方法取消http请求,并将message以error的形式返回,然后就取消了http请求,并进入该请求的catch代码块,然后进行错误处理。

参考:www.jianshu.com/p/a94a94618…