浏览器 API 【详解】fetch
fetch是浏览器原生网络请求API用来代替XMLHttpRequest返回 Promise不是第三方库不用安装。❗注意fetch只有网络异常才会 rejectHTTP 404/500 不会抛异常这点和axios不一样。基础语法fetch(resource,options).then(response{}).catch(error{})resourceurl字符串options配置对象method、headers、body等返回PromiseResponse对象Response 对象常用属性response.ok// boolean状态码200‑299为true404/500也是okfalse不会进catchresponse.status// http状态码 200、404、500response.json()// 解析响应为JSON返回Promiseresponse.text()// 获取原始文本response.blob()// 文件二进制response.headers// 响应头1. GET 请求最简单asyncfunctiongetDemo(){try{constresawaitfetch(https://jsonplaceholder.typicode.com/todos/1)// fetch 404/500不会抛出错误需要手动判断okif(!res.ok)thrownewError(HTTP错误:${res.status})constdataawaitres.json()console.log(data)}catch(err){// 网络断网、跨域才会走到这里console.error(请求失败,err)}}getDemo()2. POST 请求发送JSONPOST发JSON必须手动设置headers:{Content‑Type:application/json}body要JSON.stringify()asyncfunctionpostDemo(){constpayload{title:hello,body:world,userId:1}try{constresawaitfetch(https://jsonplaceholder.typicode.com/posts,{method:POST,headers:{Content-Type:application/json},body:JSON.stringify(payload)})if(!res.ok)thrownewError(res.status)constdataawaitres.json()console.log(返回结果,data)}catch(e){console.error(e)}}postDemo()3. 提交表单 FormData上传文件/表单不要手动设置Content‑Type浏览器会自动带上boundaryasyncfunctionformDataDemo(){constformDatanewFormData()formData.append(username,zhangsan)// formData.append(file, fileObj) // 上传文件constresawaitfetch(/api/upload,{method:POST,body:formData})constdataawaitres.json()}4. 常用配置项完整示例fetch(url,{method:GET,// GET POST PUT DELETE PATCHheaders:{Content-Type:application/json,token:xxxxxx// 请求头携带token},body:JSON.stringify({a:1}),// GET不要写bodymode:cors,// cors、no‑cors、same‑origincredentials:include,// 携带cookieinclude跨域也带same‑origin仅同源signal:abortSignal,// 取消请求}) 取消 fetch 请求AbortController非常常用React组件卸载要取消请求防止setState在卸载组件执行报错asyncfunctionabortDemo(){constcontrollernewAbortController()constsignalcontroller.signal// 500ms后取消请求setTimeout(()controller.abort(),500)try{constresawaitfetch(https://jsonplaceholder.typicode.com/todos/1,{signal})constdataawaitres.json()console.log(data)}catch(err){if(err.nameAbortError){console.log(请求被手动取消)}}}abortDemo()React中使用组件卸载取消请求useEffect((){ const controller new AbortController() const signal controller.signal async function loadData(){ const res await fetch(/api/list, {signal}) } loadData() // effect清理函数组件卸载执行abort return () controller.abort() }, [])fetch vs axios 重点区别面试特性fetchaxios依赖浏览器原生无需安装第三方库错误处理404/500不会reject要判断ok非2xx直接进入catch拦截器无需要自己封装内置请求/响应拦截器超时无timeout靠AbortController模拟直接timeout配置转换数据手动 res.json()自动解析JSON取消请求AbortControllercancelToken / AbortController✨ 简易封装fetch项目里可以直接用asyncfunctionrequest(url,options{}){constbaseUrlconstheaders{Content-Type:application/json,...options.headers}// token示例 headers.Authorization Bearer ${localStorage.getItem(token)}constresawaitfetch(baseUrlurl,{...options,headers})if(!res.ok){thrownewError(http:${res.status})}returnres.json()}// 使用// request(/api/todo,{method:GET})// .then(dconsole.log(d))⚠️ 坑总结HTTP 4xx、5xx 不会触发catch必须手动判断!res.okPOST JSON必须JSON.stringify设置Content‑Type:application/jsonFormData不要手动设置Content‑Type组件卸载记得AbortController.abort()取消请求避免内存泄漏fetch不支持Node.js低版本Node18才内置fetch旧node需要安装node‑fetch包。实战范例重点留意范例代码中的多层错误处理useEffect((){// 使用原生 fetch 获取数据fetch(http://localhost:5293/api/products?keywordMacBook).then((response){if(!response.ok){// 如果响应状态码不是 2xx 范围的成功响应抛出错误throw newError(Failed to fetch data);}returnresponse.json();// 如果成功解析 JSON}).then((data){if(data.code!200)throw newError(data.message);returndata;});},[]);

相关新闻

程序员如何平衡技术理性与生活感性:从摇滚乐到市井烟火

程序员如何平衡技术理性与生活感性:从摇滚乐到市井烟火

1. 从代码到生活:一个程序员的“跨界”叙事“跨界”这个词,在技术圈里快被用滥了。从程序员转产品经理,从后端转算法,甚至从互联网转行卖保险,似乎都算“跨界”。但今天我想聊的,可能和你理解的都不太一样。…

2026/8/16 6:28:57 阅读更多 →
定制化企业网盘深度解析:技术能力、落地场景与产品选型指南

定制化企业网盘深度解析:技术能力、落地场景与产品选型指南

一、前言在企业数字化转型持续深化的当下,文件数据已经成为企业核心数字资产,贯穿办公协作、业务流转、数据归档、合规留存全流程。企业网盘作为企业文件存储、团队协同、数据管控的核心基础设施,是企业数字化体系中不可或缺的重要模块。市面…

2026/8/16 6:28:57 阅读更多 →
网络安全日报实战指南:从信息聚合到情报驱动的安全运营

网络安全日报实战指南:从信息聚合到情报驱动的安全运营

1. 项目概述:一份“熟透”的网络安全日报意味着什么?“枇杷熟了”,这个标题乍一看充满了生活气息,甚至有些诗意,但当它与“全球网络安全日报2026-03-10”结合在一起时,就形成了一种独特的张力。这不像是一份…

2026/8/16 6:27:57 阅读更多 →

最新新闻

游戏设计中提示工程的实践与教训

游戏设计中提示工程的实践与教训

1. 当提示工程遇上游戏设计:一场未达预期的化学反应三年前,当我第一次将提示工程(Prompt Engineering)引入某开放世界RPG的NPC对话系统时,团队所有人都认为找到了"银弹"——只需精心设计的提示词就能让数百个…

2026/8/16 7:42:19 阅读更多 →
【软考】2020年信息安全工程师下午案例真题与答案完整版(下午案例分析)

【软考】2020年信息安全工程师下午案例真题与答案完整版(下午案例分析)

**2020年信息安全工程师下午案例真题与答案完整版(下午案例分析)**1、试题一(共14分) 阅读下列说明,回答问题1至问题6,将解答填入答题纸的对应栏内。 【说明】 Linux系统通常将用户名相关信息存放在/etc/passwd文件中,…

2026/8/16 7:42:19 阅读更多 →
AI技能生态解析:从核心架构到五大类“真香”应用实战

AI技能生态解析:从核心架构到五大类“真香”应用实战

1. 项目概述:从Claw到Skills生态的深度探索最近在AI圈子里,Claw和它的Skills生态成了大家茶余饭后讨论的热点。作为一个长期泡在AI应用开发一线的从业者,我深切感受到,这波由Claw引领的“技能化”浪潮,正在重新定义我们…

2026/8/16 7:42:19 阅读更多 →
2026商照轨道灯厂家TOP10榜单,谁才是性价比之王?

2026商照轨道灯厂家TOP10榜单,谁才是性价比之王?

上周,一个做连锁餐饮的朋友跟我吐槽,说被某个灯具供应商坑惨了。他新开的火锅店,订了300套轨道灯。结果呢?交期拖了25天,房租人工照付,开业整整推迟两周。更气人的是,灯装上之后,菜品…

2026/8/16 7:42:19 阅读更多 →
成都壁挂炉维修|过保故障专业处理|各区驻点师傅快速上门|欧米到家持证规范服务

成都壁挂炉维修|过保故障专业处理|各区驻点师傅快速上门|欧米到家持证规范服务

【24小时报修热线:400-996-9791】欧米到家是成都本地具备全套合规资质的壁挂炉专业维修服务商,全城分区驻点,专注家用、商用壁挂炉过保故障维修、深度除垢清洗、原厂配件更换、采暖系统调试、移机检修一站式服务。成都冬季湿冷,且…

2026/8/16 7:42:19 阅读更多 →
云盘内容审核技术解析:从哈希匹配到深度学习AI的攻防实战

云盘内容审核技术解析:从哈希匹配到深度学习AI的攻防实战

1. 从一次文件分享的“意外”说起前阵子,我帮一个做影视剪辑的朋友传一个工作素材包。包里有他剪辑的短片、一些参考影片片段,以及大量从公开素材库下载的用于制作片头特效的动画序列。文件数量多,体积大,用百度云分享链接是最方便…

2026/8/16 7:41:19 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →