从xhr到axios源码分析(二)

1.axios的理解与使用

    在我们日常的开发中大家都应该或多或少的涉及到用axios发送请求,尤其是vue框架,原因是vue主推发送请求用axios做交互。
1.axios的特点:
    (1)基于promise的ajax请求库
    (2)浏览器端/node端都能使用
    (3)支持请求/响应拦截器
    (4)支持取消请求
    (5)请求/响应数据转换
    (6)批量发送多个请求(promise.all)
2.发送请求的方法:
    axios.request(config)
    axios.get(url[, config])
    axios.delete(url[, config])
    axios.head(url[, config])
    axios.options(url[, config])
    axios.post(url[, data[, config]])
    axios.put(url[, data[, config]])
    axios.patch(url[, data[, config]])
3.Interceptors(拦截器)

// Add a request interceptor
//请求拦截器发送请求之前执行
axios.interceptors.request.use(function (config) {
    
    
    // Do something before request is sent
    return config;
  }, function (error) {
    
    
    // Do something with request error
    return Promise.reject(error);
  });
  // Add a response interceptor
  //响应拦截器在得到响应数据之后执行
axios.interceptors.response.use(function (response) {
    
    
    // Do something with response data
    return response;
  }, function (error) {
    
    
    // Do something with response error
    return Promise.reject(error);
  });

4.axios默认配置
axios.defaults.baseURL = ‘https://api.example.com’;默认请求地址
axios.defaults.headers.common[‘Authorization’] = AUTH_TOKEN;
axios.defaults.headers.post[‘Content-Type’] = ‘application/x-www-form-urlencoded’;默认编码方式
5.axios.create()
说明:axios的2次封装,为什么是2次封装,因为axios是封装的xhr。所以axios.create是等于对xhr的2次封装,而不是对axios的2次封装。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>axios.create</title>
</head>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
  // axios.create(config)
  // (1)根据指定的配置创建一个新的axios
  // (2)新的axios没有取消请求和批量发送请求的方法,其他语法相同
  // (3)创建这个语法的原因:可能在一个项目中用到2个不同的服务器

  axios.default.baseURL = 'https://www.baidu.com'
  axios({
    
    
    url:'/get'//https://www.baidu.com/get
  })

  //当同一个项目用到2个不同的服务器地址的时候,不可能去修改default.baseURL
  const instance = axios.create({
    
    
   baseURL:'http://www.google.cn'
  })
  //用instance发送请求
  instance({
    
    
    url:'/get'//http://www.google.cn/get
  })
</script>

</html>

猜你喜欢

转载自blog.csdn.net/lbchenxy/article/details/105381631
XHR