恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

浏览器 API 【详解】fetch

  • 首页
  • 资讯中心
  • /
  • 浏览器 API 【详解】fetch

相关资讯

程序员如何平衡技术理性与生活感性:从摇滚乐到市井烟火 2026/8/16 6:29:01
定制化企业网盘深度解析:技术能力、落地场景与产品选型指南 2026/8/16 6:29:01
从光电技术原理看真假皮秒:脉宽、峰值功率与脉冲波形的核心差异 2026/8/16 6:29:01

最新资讯

十二草集:跳出洗护赛道同质化内卷,打造中式草本养发差异化标杆
彻底解决SolidWorks Shell Extension Server崩溃:从原理到根治方案
VSCode中高效调试:快速console.log()的多种实现方案
AI Agent能力进化三阶段:从OpenClaw任务自动化到自主规划
MyBatis Log Plugin:IDEA插件自动还原可执行SQL,提升开发调试效率
ZLMediaKit HTTP Hook机制详解与实战配置

今日推荐

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本周热门

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

浏览器 API 【详解】fetch

发布时间:2026/8/16 6:29:01
浏览器 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;});},[]);

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号