0

0

Fetch API在javascript中是什么_它与传统的AJAX有何不同【教程】

夜晨

夜晨

发布时间:2026-01-18 22:14:41

|

944人浏览过

|

来源于php中文网

原创

fetch 是 xmlhttprequest 的现代替代方案,但默认不带 cookie、不因 4xx/5xx 状态码 reject、无原生上传/下载进度支持,取消请求需 abortcontroller。

fetch api在javascript中是什么_它与传统的ajax有何不同【教程】

Fetch API 是浏览器原生提供的、用于发起网络请求的现代 JavaScript 接口,它不是“更高级的 AJAX”,而是 XMLHttpRequest(XHR)的替代方案——设计目标是更简洁、更符合 Promise 语义,但默认行为和错误处理逻辑与传统 AJAX 有关键差异。

Fetch 默认不带 Cookie,而 XHR 默认发送

这是最常踩的坑:即使设置了 withCredentials: true,Fetch 也必须显式传入 credentials 选项,否则跨域请求不会携带 Cookie,登录态直接丢失。

  • fetch(url) → 不发 Cookie(包括同域)
  • fetch(url, { credentials: 'include' }) → 同域/跨域都发 Cookie
  • fetch(url, { credentials: 'same-origin' }) → 仅同域发(默认行为其实是 'omit'
  • XHR 对应的是 xhr.withCredentials = true,且默认为 false,但很多旧代码已习惯设为 true,迁移到 Fetch 时容易遗漏

Fetch 不把 4xx/5xx 当作 reject,而 XHR 的 onerror 不触发

fetch() 只在网络失败(如断网、DNS 错误、CORS 被拒)时 reject;HTTP 状态码如 404500 仍会 resolve,并返回一个 Response 对象。这和 jQuery.ajax 或封装良好的 XHR 工具库行为不一致,容易导致错误未被捕获。

fetch('/api/user')
  .then(res => {
    if (!res.ok) {
      // 必须手动检查!res.ok 等价于 res.status >= 200 && res.status < 300
      throw new Error(`HTTP error: ${res.status}`);
    }
    return res.json();
  })
  .catch(err => {
    // 这里捕获网络错误 + 手动抛出的业务错误
    console.error(err);
  });

Fetch 没有 progress 事件,上传大文件时无法监听进度

XHR 支持 xhr.upload.onprogress,Fetch 原生不提供等效机制。如果需要上传进度,必须用 ReadableStream 手动分块读取并上报,或回退到 XHR。

VIVA
VIVA

一个免费的AI创意视觉设计平台

下载

立即学习Java免费学习笔记(深入)”;

  • 下载进度:Fetch 也无法原生监听,Response.bodyReadableStream,可逐块读取,但需自行计算已读字节
  • 实际项目中,上传大文件且需进度条时,XMLHttpRequest 仍是更稳妥的选择
  • 部分 polyfill(如 whatwg-fetch)完全不支持流式读取,仅适用于简单 GET/POST

AbortController 是 Fetch 的取消机制,XHR 用 abort()

Fetch 通过 AbortController 实现请求取消,比 XHR 的 .abort() 更统一(也可用于 setTimeoutPromise.race 等),但需注意兼容性与使用时机。

const controller = new AbortController();
fetch('/api/data', { signal: controller.signal })
  .then(res => res.json())
  .catch(err => {
    if (err.name === 'AbortError') {
      console.log('请求已被取消');
    }
  });

// 3 秒后取消
setTimeout(() => controller.abort(), 3000);

注意:AbortController 在 IE 中不可用,若需兼容,要么降级用 XHR,要么引入 polyfill;另外,controller.abort() 后 Promise 会以 AbortError reject,不是静默终止。

真正难的不是写 fetch,而是记住它不自动处理 Cookie、不因 HTTP 状态码 reject、没有上传进度、取消依赖额外对象——这些“默认不做事”的设计,让开发者更容易写出看似运行、实则漏逻辑的请求代码。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

156

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

334

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

406

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

515

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

312

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

128

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

51

2026.01.13

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号