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

前端基础——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.</

相关文章:

  • 网站前端和后端高并发优化的策略、方法和相关技术
  • 训练语言模型以高效推理
  • 基于单片机的多功能门铃控制系统设计(论文+源码)
  • 10分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
  • 【Modelsim】warning:(vsim-WLF-5000) WLF file currently in use:vsim.wlf
  • 工控网络安全介绍 工控网络安全知识题目
  • Aseprite详细使用教程(8)——移动工具
  • 2025.2.18
  • linux配置网络安全服务图
  • 线性模型 - Logistic 回归
  • elabradio入门第四讲——位同步(符号同步)
  • SPB day2
  • [半导体检测-16]:相干激光 - PermAlign技术
  • mac安装Pyspark并连接Mysql
  • 基于TI的TDA4高速信号仿真条件的理解 4.6
  • 浏览器报错:无法访问此网站 无法找到xxx.xxx.net的DNS地址。正在诊断该问题。尝试运行Windows网络诊断。DNS_PROBE_STARTED
  • 另一棵树的子树
  • Ubuntu下mysql主从复制搭建
  • C#: 创建Excel文件并在Excel中写入数据库中的数据
  • 【Python项目】文本相似度计算系统
  • 美股全线收涨:道指涨逾千点,纳斯达克中国金龙指数涨5.4%
  • 某博主遭勒索后自杀系自导自演,成都警方立案调查
  • 山东枣庄同一站点两名饿了么骑手先后猝死,当地热线:职能部门正调查
  • 中国一直忽视欧盟经贸问题关切?外交部:事实证明中欧相互成就,共同发展
  • 库尔德工人党决定自行解散
  • 打击网络谣言、共建清朗家园,中国互联网联合辟谣平台2025年4月辟谣榜