史上最详细axios,读完你就全部懂了

使用XMLHttpRequest封装简单的ajax请求函数1. XHR的MDN文档https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest2. XHR的理解1). 使用XHR对象可以发送ajax请求与服务端进行交互2). 前端可以获取数据,而无需让整个页面进行刷新3). 只更新Web页面的局部,而不影响用户的操作3. 一般http请求与ajax请求的区别1). ajax请求是一种特别的http请求2)
摘要由CSDN通过智能技术生成

使用XMLHttpRequest封装简单的ajax请求函数

1. XHR的MDN文档

https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest

2. XHR的理解
1). 使用XHR对象可以发送ajax请求与服务端进行交互
2). 前端可以获取数据,而无需让整个页面进行刷新
3). 只更新Web页面的局部,而不影响用户的操作

3. 一般http请求与ajax请求的区别
1). ajax请求是一种特别的http请求
2). 对服务器端来说没有任何区别,区别在浏览器端
3). 对浏览器端来说,只有XHR或fetch发出的请求才是ajax请求,其他的都是一般http请求
4). 浏览器端接收到响应:
    a. 一般请求: 浏览器会直接显示响应数据体,也就是刷新/跳转页面
    b. ajax请求: 浏览器不会对页面做任何更新操作,只是调用相应的回调函数并传入响应数据
    

4. XHR的API
1). XMLHttpRequest() 创建XHR对象的构造函数
2). status 响应状态码,比如404,200...
3). statusText 响应状态文本
4). readyState 标识请求状态的只读属性
    0 初始
    1 open()之后
    2 send()之后
    3 请求中
    4 请求完成
5). onreadystatechange 绑定readyState改变的监听
6). responseType 指定响应数据类型,如果是'json',得到响应后自动解析响应数据体
7). response 响应体数据,类型取决于responseType
8). timeout 指定请求超时时间,默认为0没有限制
9). ontimeout 绑定超时的监听
10). onerror 绑定请求错误的监听
11). open(url,method[,async]) 初始化一个请求
12). send(data) 发送请求
13). abort() 中断请求
14). getResponseHeader(name)  获取指定的响应头
15). getAllResponseHeaders() 获取所有的响应头组成的字符串
16). setRequestHeader(name,value) 设置请求头

5. 使用XHR简单封装axios
  封装目的
    a. 函数的返回值类型为Promise,成功的结果为response,失败的结果为error
    b. 能够处理GET/POST/DELETE/PUT等类型的请求
    c. 构造函数的参数为一个配置对象
    d. 响应的json数据自动解析为js对象
 

(function (window) {
  //参数为配置对象,默认get请求,queryParams和data都为空对象
  function axios({url, method = 'GET', params = {}, data = {}}) {
    //返回一个Promise
    return new Promise((resolve, reject) => {
      //处理method的大小写
      method = method.toUpperCase()

      //处理params, 拼接成queryString
      if (params) {
        let queryString = ''
        Object.keys(params).forEach(key => {
          queryString += `${key}=${params[key]}&`
        })
        //去掉最后一个&
        queryString = queryString.substring(0, queryString.length - 1)
        //把queryString拼到url上
        url += '?' + queryString
      }

      //创建xhr对象
      const request = new XMLHttpRequest()
      //打开连接(还没有请求)
      request.open(method, url)
      //发送请求
      if (method === 'GET' || method === 'DELETE') {
        request.send()
      } else if (method === 'POST' || method === 'PUT') {
        //设置请求头类型
        request.setRequestHeader('ContentType', 'application/json;charset=utf-8')
        //将data从js对象转成json string
        request.send(JSON.stringify(data))
      }

      //绑定状态改变监听
      request.onreadystatechange = () => {
        //请求没有完成
        if (request.readyState !== 4) return
        //只有status在[200,300)之间才代表成功
        const {status, statusText} = request
        //axios的源码中也是这样的简单粗暴
        if (status >= 200 & status < 300) {
          //response对象
          const response = {
            data: JSON.parse(request.response),
            status,
            statusText
          }
          //resolve promise
          resolve(response)
        } else {
          //其他状态都表示失败, reject promise, 给予一个友好的提示
          reject(new Error('request failed! response code = ' + status))
        }
      }
    })
  }

  window.axios = axios
})(window)

axios的理解和使用

 axios的github地址

1. axios的特点
  1). 基于promise的异步请求ajax库
  2). 浏览器端/node端都可以使用
  3). 支持请求/相应拦截
  4). 支持请求取消
  5). 请求/响应数据转换
  6). 批量发送多个请求
  

2. axios的常用语法
   axios(config) 通用/最常用/最本质的发送任意类型的请求的调用方式
   axios(url[,config]) 只指定url,发送get请求
   axios.request(config) 等同于axios(config)
   axios.get(url[,config]) 发get请求
   axios.post(url[,data,config]) 发送post请求
   a

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
axios 是一个基于 Promise 的 HTTP 库,用于进行浏览器和 Node.js 中的网络请求。它是目前前端开发中最常用的网络请求库之一,具有强大的功能和灵活的配置选项。 在封装 axios 时,我们可以根据业务需求进行全局设置,统一处理请求和响应的拦截器,以及自定义请求方法和实例。下面是对 axios 进行详细封装的示例: 1. 安装 axios 通过 npm 或 yarn 安装 axios:`npm install axios` 或 `yarn add axios` 2. 创建封装文件 在项目中创建一个名为 axios.js 的文件,并导入 axios: ``` import axios from 'axios'; ``` 3. 创建实例 使用 axios.create 方法创建一个 axios 实例,并设置全局配置: ``` const instance = axios.create({ baseURL: 'https://api.example.com', // 设置基础URL timeout: 5000 // 设置请求超时时间 }); ``` 4. 设置拦截器 通过 instance.interceptors.request.use 和 instance.interceptors.response.use 方法设置请求和响应拦截器: ``` // 请求拦截器 instance.interceptors.request.use(config => { // 在请求发送前可以进行一些操作,如添加请求头 config.headers['Authorization'] = 'Bearer xxx'; return config; }, error => { return Promise.reject(error); }); // 响应拦截器 instance.interceptors.response.use(response => { // 在响应返回前可以进行一些操作,如处理通用错误码 if (response.data.code === 200) { return response.data.data; } else { return Promise.reject(response.data); } }, error => { return Promise.reject(error); }); ``` 5. 自定义请求方法 在封装文件中,可以根据业务需求,编写 get、post、put、delete 等常用请求方法: ``` export function get(url, params) { return instance.get(url, { params }); } export function post(url, data) { return instance.post(url, data); } export function put(url, data) { return instance.put(url, data); } export function del(url) { return instance.delete(url); } ``` 通过以上封装,我们可以在项目中愉快地使用封装的 axios 进行网络请求,使得代码更加清晰、简洁,并且方便进行全局配置和拦截处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

短暂又灿烂的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值