【学一点儿前端】ajax、axios和fetch的概念、区别和易混淆点
省流读法
ajax是js异步技术的术语,早期相关的api是xhr,它是一个术语。
fetch是es6新增的用于网络请求标准api,它是一个api。
axios是用于网络请求的第三方库,它是一个库。
1.Ajax
它的全称是:Asynchronous JavaScript And XML,翻译过来就是“异步的 Javascript 和 XML”。
很多小伙伴可能会误以为 Ajax 是发请求的一种方式,或者把XMLHttpRequest 与 Ajax 划等号,其实这是错误和片面的。
正解:
Ajax 是一个技术统称,是一个概念模型,它囊括了很多技术,并不特指某一技术,它很重要的特性之一就是让页面实现局部刷新。
特点:
局部刷新页面,无需重载整个页面。
简单来说,Ajax 是一种思想,XMLHttpRequest 只是实现 Ajax 的一种方式。其中 XMLHttpRequest 模块就是实现 Ajax 的一种很好的方式,这也是很多面试官喜欢让面试者手撕的代码之一。
利用 XMLHttpRequest 模块实现 Ajax。
XMLHttpRequest示例代码
<body><script>function ajax(url) {const xhr = new XMLHttpRequest();xhr.open("get", url, false);xhr.onreadystatechange = function () {// 异步回调函数if (xhr.readyState === 4) {if (xhr.status === 200) {console.info("响应结果", xhr.response)}}}xhr.send(null);}ajax('https://smallpig.site/api/category/getCategory')</script>
</body>
2.Fetch
Fetch 是在 ES6 出现的,它使用了 ES6 提出的 promise 对象。它是 XMLHttpRequest 的替代品。
很多小伙伴会把它与 Ajax 作比较,其实这是不对的,我们通常所说的 Ajax 是指使用 XMLHttpRequest 实现的 Ajax,所以真正应该和 XMLHttpRequest 作比较。
正解:
Fetch 是一个 API,它是真实存在的,它是基于 promise 的。
特点:
使用 promise,不使用回调函数。 采用模块化设计,比如 rep、res 等对象分散开来,比较友好。
通过数据流对象处理数据,可以提高网站性能。
所以这里就和 Ajax 又很大不同了,一个是思想,一个是真实存在的 API,不过它们都是用来给网络请求服务的,我们一起来看看利用 Fetch 实现网络请求。
fetch示例代码
<body><script>function ajaxFetch(url) {fetch(url).then(res => res.json()).then(data => {console.info(data)})}ajaxFetch('https://smallpig.site/api/category/getCategory')</script>
</body>
上段代码利用 Fetch 发送了一个最简单的 get 请求,其中最重要的特点之一就是采用了.then 链式调用的方式处理结果,这样不仅利于代码的可读,而且也解决了回调地狱的问题。
3.axios
Axios 是用于发出网络请求的第三方 HTTP 客户端库。绝大部分使用基于xhr封装,截止文章编写时间也已经支持fetch,可以在浏览器和 Node.js 中使用。它提供了更高级别的封装,使发送请求和处理响应更加简单和灵活。axios 支持以简洁的方式设置请求参数、处理请求和响应拦截器,并提供了更好的错误处理和取消请求的支持。
正解:
Axios 是用于发出网络请求的第三方 HTTP 客户端库。
特点:
使用 Promise 对象来处理异步请求的结果,可以更加方便地进行链式调用和错误处理。
axios示例代码
axios.get('https://api.example.com/data').then(function(response) {console.log(response.data);}).catch(function(error) {console.log(error);});
总结
ajax是js异步技术的术语,早期相关的api是xhr,它是一个术语。
fetch是es6新增的用于网络请求标准api,它是一个api。
axios是用于网络请求的第三方库,它是一个库。
易混淆点以及注意点
- xhr是ajax的一种实现
- fetch应该和xhr作比较,不能和ajax和axios做比较
- axios和fetch都基于promise
- fetch使用了关注分离的设计思想(请求和响应结果分开处理)
- axios目前也支持fetch
相关文章:
【学一点儿前端】ajax、axios和fetch的概念、区别和易混淆点
省流读法 ajax是js异步技术的术语,早期相关的api是xhr,它是一个术语。 fetch是es6新增的用于网络请求标准api,它是一个api。 axios是用于网络请求的第三方库,它是一个库。 1.Ajax 它的全称是:Asynchronous JavaScri…...
互联网Java工程师面试题·Java 总结篇·第五弹
目录 47、Java 语言如何进行异常处理,关键字:throws、throw、try、catch、finally 分别如何使用? 48、运行时异常与受检异常有何异同? 49、列出一些你常见的运行时异常? 50、阐述 final、finally、finalize 的区别…...
车载电子电器架构 —— 国产基础软件现在与未来
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…...
在.Core中用EF添加数据库实体类
首先安装dotnet-ef工具,否则提示: *无法执行,因为找不到指定的命令或文件。 可能的原因包括: *你拼错了内置的 dotnet 命令。 *你打算执行 .NET Core 程序,但 dotnet-ef 不存在。 你打算运行全局工具,但在路径上找不到…...
unigui添加ssl(https)访问的方法
首先到腾讯云或者阿里云去申请免费的证书,前提是在该服务商那有申请过域名,怎么找出这个界面?网页顶部一般都有个搜索框,输入【证书】或者【SSL】就能看到了,然后点击申请免费证书,把解析信息填入自己的域名…...
安防监控系统EasyCVR视频汇聚平台设备树收藏按钮的细节优化
视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流&#…...
数据结构----算法--排序算法
数据结构----算法–排序算法 一.冒泡排序(BubbleSort) 1.冒泡排序的核心思想 相邻两个元素进行大小比较,如果前一个比后一个大,就交换 注意: 在冒泡排序的过程中,促进了大的数往后去,小的数…...
Unity3D 基础——使用 Mathf.SmoothDamp 函数制作相机的缓冲跟踪效果
使用 Mathf.SmoothDamp 函数制作相机的缓冲跟踪效果,让物体的移动不是那么僵硬,而是做减速的缓冲效果。将以下的脚本绑定在相机上,然后设定好 target 目标对象,即可看到相机的缓动效果。通过设定 smoothTime 的值,可以…...
leetcode-200. 岛屿数量
1. 题目 leetcode题目链接 2. 解答 思路: 需要循环遍历每个节点;找到陆地,基于陆地开始遍历陆地的上下左右;数组dirm dirn就可以表示某个区域的上下左右;标记遍历过的节点;设计循环的退出条件…...
python的搜索引擎系统设计与实现 计算机竞赛
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python的搜索引擎系统设计与实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:5分创新点:3分 该项目较为新颖ÿ…...
Unity随笔:在Unity中使用多线程需要注意什么
Unity3D 支持多线程编程,但是在 Unity 中使用多线程需要注意一些限制和注意事项。以下是在 Unity 中使用多线程时需要注意的事项: 1. Unity 主线程限制: Unity 中的大部分操作必须在主线程进行,包括场景的修改、资源的加载、渲染…...
SQL Select(选择) 语法
SQL SELECT 语法 SELECT 语法用于从数据库中选择数据。 返回的数据存储在结果表中,称为结果集。 基本语法:SELECT和FROM 在任何SQL查询语句中都:SELECT和FROM他们必须按顺序排列。SELECT指示要查看哪些列,FROM标识它们所在的表。…...
Python武器库开发-基础篇(二)
基础篇(二) if 语句 编程时经常需要检查一系列条件,并据此决定采取什么措施。在Python中,if 语句让你能够检查程序的当前状态,并据此采取相应的措施 下面是一个简短的示例,演示了如何使用if 语句来正确地处理特殊情形。假设你有…...
在 CentOS 8.2 上安装 MySQL C/C++ 客户端库 libmysqlclient.so
添加 MySQL 官方 Yum 存储库: sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-3.noarch.rpm 安装 MySQL C/C 客户端库: sudo dnf install mysql-devel 这将自动安装所需的依赖项,并将 libmysqlclient 库及其头…...
『C++ - STL』之优先级队列( priority_queue )
文章目录 前言优先级队列的结构优先级队列的模拟实现仿函数 最终代码 前言 什么是优先级队列,从该名中可以知道他一定有队列的一定属性,即先入先出(LILO),而这里的优先级则可以判断出它的另一个特点就是可以按照一定的条件将符合该条件的先进…...
简述什么是服务端包含(Server Side Include)?
Server-side include(服务器端包括)是浏览器向服务器请求您的文档时并入您的文档的一个文件。 当访问者浏览器请求含有 include(包括)指令的文档时,服务器处理 include(包括)指令并创建新的文档,在新文档中 include(包括)指令被所包括的文件内容取代。然后服务器将此…...
领英如何注册?2023超全面详细教程
领英是一家面向商业用户的全球最大的职业社交网站,据统计,Linkedln用户每月与网页的交互次数超过10亿次。对于跨境人来说,他更是作为一个开发客户、广告营销的工具,被称为跨境的“风口”。 一、领英被封原因 1、IP、设备问题 1&…...
Spring Cloud Gateway 使用 Redis 限流使用教程
从本文开始,笔者将总结 spring cloud 相关内容的教程 版本选择 为了适应 java8,笔者选择了下面的版本,后续会出 java17的以SpringBoot3.0.X为主的教程 SpringBoot 版本 2.6.5 SpringCloud 版本 2021.0.1 SpringCloudAlibaba 版本 2021.0.1.…...
Qt事件系统 day7
Qt事件系统 day7 事件系统 在Qt中,事件是派生自抽象QEvent类的对象,它表示应用程序内发生的事情或应用程序需要知道的外部活动的结果。事件可以由QObject子类的任何实例接收和处理,但它们与小部件尤其相关。Qt程序需要在main()函数创建一个…...
微服务拆分的思考
一、前言 前面几篇文章介绍了微服务核心的两个组件:注册中心和网关,今天我们来思考一下微服务如何拆分,微服务拆分难度在于粒度和层次,粒度太大拆分的意义不大,粒度太小开发、调试、运维会有很多坑。 二、微服务划分…...
注册培训师、咨询师——杨刚老师简介
注册培训师、咨询师——杨刚老师简介注册培训师、咨询师 MTP认证讲师——日本产业训练协会认证 世界500强管理目视化解决方案 版权持有人 杨老师具备10年生产管理经验、15年培训及咨询辅导经验。曾任某日资企业制作课课长、某上市企业精益经理、某民营企业绩效经理、某咨…...
哨兵1号数据处理必备:如何搞定精密轨道文件和SRTM DEM数据(最新可用链接)
哨兵1号数据处理实战:精密轨道与SRTM DEM数据获取全指南 对于从事InSAR或时序分析的遥感研究者而言,数据预处理阶段的轨道校正和地形相位去除是决定成果精度的关键步骤。本文将聚焦哨兵1号SAR数据处理中最核心的两类辅助数据——精密轨道文件和SRTM DEM&…...
这个AI助手不让你教它,它自己来了解你
这个AI助手不让你教它,它自己来了解你OpenHuman:9700 Star,GitHub霸榜的秘密最近GitHub Trending上冒出来一个项目,连续霸榜多天,Star数蹭蹭往上涨。我点进去看了一眼,思路跟之前那些Agent工具完全不一样。…...
从选型到设计:手把手教你根据7系列FPGA数据手册做项目选型(以Kintex-7为例)
从选型到设计:手把手教你根据7系列FPGA数据手册做项目选型(以Kintex-7为例) 在硬件系统设计中,FPGA选型往往决定着项目的成败。面对Xilinx 7系列丰富的产品线,工程师需要像外科医生选择手术器械一样精准——既要考虑当…...
别死磕数据线!聊聊EMMC BGA布线里那些能删掉的‘废脚’
别死磕数据线!EMMC BGA布线中那些被忽略的"废脚"优化策略 在PCB layout工程师的日常工作中,EMMC存储器的BGA封装布线常常让人头疼不已。0.5mm的球间距、密集的数据线、严格的阻抗要求,这些因素叠加在一起,往往让设计者…...
【Ansible 入门实战】三种变量详解
Ansible 同名变量优先级实战详解这篇教程基于你当前的 Ansible 环境,通过 三种同名变量(主机变量 / 外部变量 / Play 变量) 的对比实验,完整展示变量优先级的验证过程。一、实验目标在同一个 Ansible Playbook 中,定义…...
钉钉里藏了个 AI 员工?OpenClaw 接入玩法深度拆解
前言 本文将指导您如何将OpenClaw工具与钉钉企业内部机器人进行无缝对接,实现业务信息和任务的自动化同步,有效提升团队协作效率。我们提供了完整的接入流程指南,包含详细的操作步骤、常见问题解决方案以及实用优化技巧,帮助开…...
科研学术篇---论文搜索方法
高效搜集和研读论文,是构建扎实知识体系的基石。要想做到“高效”与“高质”并重,需要把整个过程当作一个闭环系统来优化——从目标锁定、来源筛选、检索策略,到快速粗筛、深度内化、持续追踪,每一步都有对应的工具和心法。下面逐…...
win挂载liunx目录
服务器能 SSH 登录时,在 Windows 上把远程目录映射成盘符。 步骤: 安装 WinFsp (https://winfsp.dev/rel/) 安装 SSHFS-Win(或商店版 WinFsp SSHFS)资源管理器地址栏输入,或命令行:…...
2026 年 AI 编程工具横评:Claude Code、Cursor、Copilot、Codex 谁才是真正的生产力?
爆款标题备选我把五个 AI 编程工具全装了一遍,只有一个让我想付费Claude Code vs Cursor vs Copilot:2026 开发者选型实战指南Copilot 的垄断结束了——2026 AI 编程工具真实横评花了一周用 AI 编程 Agent 写项目,最后留下了这一个AI 编程工具…...
