一、发起HTTP请求

Axios是一个基于promise的HTTP库,可以发送跨域请求、取消请求、自动转换数据格式等。使用Axios时,只需要用一个简单直观的方法发起请求。Axios的请求方法支持Promise API,因此可以方便地进行异步操作。

axios({
  method: 'get',
  url: 'https://api.example.com/users',
  params: {
    ID: 12345
  }
})
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

以上代码是一个简单HTTP GET请求的示例。使用Axios发送请求时,我们只需要传入一个包含请求方法、url和请求参数的配置对象。Axios会自动将JavaScript对象转换成JSON格式,并发送到服务器。

二、请求、响应拦截器

Axios提供请求和响应拦截器,可以在请求和响应发送的过程中拦截和处理数据,方便我们做统一的处理。

1. 请求拦截器

请求拦截器可以在请求发送之前对请求进行统一的处理。比如添加通用请求头、参数加密等操作。以下是一个添加通用请求头的示例。

axios.interceptors.request.use(config => {
  config.headers.Authorization = 'token';
  return config;
});

2. 响应拦截器

响应拦截器可以在请求返回之后对响应进行统一的处理。比如自动判断响应状态、解密数据等操作。以下是一个自动判断响应状态的示例。

axios.interceptors.response.use(response => {
  if (response.status === 200) {
    return response.data;
  } else {
    return Promise.reject(response.data);
  }
}, error => {
  return Promise.reject(error);
});

三、取消请求

在实际项目中,我们常常需要取消一些不必要或已过期的请求,防止资源的浪费。Axios提供了取消请求的方法,可以方便地取消多个请求。

1. 取消单个请求

以下是一个取消单个请求的示例。使用Axios发送请求时,会返回一个包含cancel函数的cancelToken对象。我们可以在需要取消请求时调用cancel函数。

const CancelToken = axios.CancelToken;
let cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    cancel = c;
  })
}).catch(function (thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // 处理错误
  }
});

cancel();

2. 取消多个请求

当我们需要取消多个请求时,可以将多个cancelToken对象添加到数组中,并在需要取消时遍历一遍数组调用cancel函数。以下是一个取消多个请求的示例。

const CancelToken = axios.CancelToken;
let cancelArr = [];

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    cancelArr.push(c);
  })
});

axios.get('/user/23456', {
  cancelToken: new CancelToken(function executor(c) {
    cancelArr.push(c);
  })
});

for(let i = 0; i < cancelArr.length; i++) {
  cancelArr[i]();
}

四、自动转换数据格式

Axios可以自动将JavaScript对象转换成JSON格式,并发送到服务器,服务器将返回的数据也会自动转换成JavaScript对象。我们不需要手动进行数据格式的转换操作。

const data = {
  name: 'Tom',
  age: 18
};

axios.post('/user', data)
  .then(response => {
    console.log(response);
  })
  .catch(error => {
    console.log(error);
  });

以上代码发送了一个POST请求,并附带了一个JavaScript对象。Axios会自动将JavaScript对象转换成JSON格式,并发送到服务器。服务器返回的数据也会自动转换成JavaScript对象。