当前位置: 首页 > article >正文

前端基础——axios、fetch和xhr来封装请求

分别用axios、fetch和xhr来封装请求。首先,我得先理解这三种技术各自的特点和封装方式。Axios是一个基于Promise的第三方库,底层可能使用XHR或Node.js的http模块,而fetch是浏览器原生的API,也是基于Promise的。XHR则是比较原始的浏览器API,需要手动处理回调,代码相对冗长。

首先看Axios的封装。根据Axios通常通过创建实例并配置baseURL、超时时间,使用拦截器处理请求和响应。比如,提到使用axios.create来创建实例,设置baseURL和timeout。请求拦截器可以用来添加token,响应拦截器处理错误。还提到统一处理config、请求头和错误处理。所以封装Axios需要创建实例,配置默认值,添加拦截器,然后导出封装后的方法。

然后是fetch的封装。指出,fetch使用Promise,但需要手动处理响应,比如检查状态码,转换数据格式。中的示例展示了如何封装post和get方法,设置headers和credentials。需要注意fetch默认不携带cookie,且对400、500状态码不会自动reject,所以封装时要处理这些情况。比如,在post方法中设置method、headers、body,并使用res.json()解析数据。此外,还提到fetch不支持超时控制,可能需要用Promise.race和setTimeout模拟,但无法真正中止请求。

接下来是XHR的封装。说明XHR需要手动创建实例,设置open方法,监听readystatechange事件。的示例展示了如何设置请求头,发送数据。由于XHR基于事件回调,封装时最好用Promise包装,使其支持异步。比如,在函数中返回Promise,在onload中resolve,onerror中reject。另外,GET请求需要将参数拼接到URL,POST需要设置Content-Type并发送字符串化的数据。

在整理过程中,需要确认各技术的关键点。比如Axios的拦截器配置,fetch的响应处理,XHR的回调封装成Promise。同时注意各证据中的差异,例如提到Axios底层可能使用XHR或fetch,但多数证据显示Axios主要封装XHR。此外,fetch的兼容性问题,如指出其兼容性不如XHR,可能需要polyfill。

最后,综合各证据的示例代码,分别写出三种方法的封装示例,确保每个步骤都有相应的证据支持,并正确引用来源。例如,Axios的实例创建和拦截器来自;fetch的封装参考;XHR的Promise封装参考。同时注意处理错误和配置项,如超时、请求头等,确保封装的健壮性。

以下分别用axios、fetch和XMLHttpRequest(XHR)封装HTTP请求的示例及说明:


一、Axios封装

Axios是基于Promise的第三方库,支持请求拦截、响应拦截等功能,适合复杂场景。

import axios from 'axios';

// 创建实例并配置默认参数
const instance = axios.create({
   
  baseURL: 'https://api.example.com',
  timeout: 10000, // 超时时间
});

// 请求拦截器(如添加Token)
instance.interceptors.request.use(
  config => {
   
    config.headers.Authorization = `Bearer ${
     localStorage.getItem('token')}`;
    return config;
  },
  error => Promise.reject(error)
);

// 响应拦截器(统一处理错误)
instance.</

http://www.kler.cn/a/552133.html

相关文章:

  • 用LangGraph轻松打造测试用例生成AI Agent
  • 【保姆级教程】DeepSeek R1+RAG,基于开源三件套10分钟构建本地AI知识库
  • 青少年网络安全竞赛python 青少年网络安全大赛
  • 【故障处理】- 11g迁19C数据泵报错: ORA-39083 ORA-06598 导致数据库大量对象导入不进去
  • Linux环境Docker使用代理推拉镜像
  • Postgresql的三种备份方式_postgresql备份
  • ARM中断流程思考。
  • 百度搜索融合 DeepSeek 满血版,开启智能搜索新篇
  • 微信小程序---计划时钟设计与实现
  • 欢乐力扣:旋转图像
  • redis的应用,缓存,分布式锁
  • LeetCodeBug-member access within null pointer of type ‘struct ListNode‘
  • 23种设计模式 - 观察者模式
  • Xshell连接虚拟机ubuntu,报错(port 22): Connection failed.
  • 【AI论文】InfiniteHiP:在单块GPU上将语言模型上下文扩展至300万个令牌
  • CTF-内核pwn入门1: linux内核模块基础原理
  • 常见安全威胁
  • 私有化搭建、本地知识库、可联网查询、具备RAG能力的私人DeepSeek
  • 常用标准库之-std::iota
  • Kafka 在大数据生态系统中的应用:实时数据流的中枢神经