javascript如何与后端API交互_如何处理HTTP请求和响应【教程】
发布时间 - 2026-01-28 00:00:00 点击率:次fetch 是 JavaScript 与后端 API 交互的核心,返回 Promise 需用 .then() 或 async/await 处理;它不因 HTTP 错误状态码(如 404、500)自动 reject,须手动检查 response.ok。
JavaScript 与后端 API 交互的核心是 fetch,不是 XMLHttpRequest,也不是第三方库(除非你有明确兼容性或功能需求)。
用 fetch 发送 GET 请求并读取 JSON 响应
现代浏览器中,fetch 是最轻量、最标准的选择。它返回 Promise,必须用 .then() 或 async/await 处理;且 fetch 不会在 HTTP 状态码异常(如 404、500)时自动 reject,这点极易踩坑。
常见错误现象:Uncaught (in promise) TypeError: Failed to fetch(网络失败)、或静默拿到 500 响应却没报错。
- 始终检查
response.ok(即status >= 200 && status ),再调用response.json() -
response.json()本身可能 reject(比如返回了非 JSON 内容),需单独 try/catch - 不要省略
catch—— 网络中断、CORS 拒绝、DNS 失败都会触发
async function getUser(id) {
try {
const res = await fetch(`/api/users/${id}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return await res.json();
} catch (err) {
console.error('获取用户失败:', err.message);
throw err;
}
}
发送 POST 请求并提交 JSON 数据
POST 不只是“发数据”,关键在于设置正确的请求头和序列化体。后端通常期望 Content-Type: application/json,而 fetch 默

JSON.stringify。
- 必须手动设置
headers: { 'Content-Type': 'application/json' } -
body必须是字符串,传对象会报错:TypeError: Request with GET/HEAD method cannot have body(其实是 body 类型不对) - 如果后端要求表单格式(
application/x-www-form-urlencoded),要用new URLSearchParams(data)而不是JSON.stringify
async function createUser(userData) {
const res = await fetch('/api/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(userData)
});
if (!res.ok) throw new Error(`创建失败: ${res.status}`);
return res.json();
}
处理 token 认证和跨域请求(CORS)
带认证的请求常失败,不是因为代码写错,而是服务端未正确配置 CORS 响应头,或前端漏传凭证。
- 若 API 需要 Bearer token,必须加
Authorizationheader:headers: { Authorization: 'Bearer ' + token } - 若请求携带 cookie 或认证头(如
Authorization),fetch必须显式设credentials: 'include',否则浏览器不会发送 - CORS 错误(如
Response to preflight request doesn't pass access control check)是服务端问题,前端无法绕过;但可确认是否误发了非简单请求(如自定义 header、非 GET/POST 方法)触发了预检
何时该用 axios 而不是原生 fetch
不是“更好”,而是“更省事”——当你反复处理重复逻辑时:axios 自动序列化 JSON、自动抛出 HTTP 错误、支持请求/响应拦截器、取消请求(AbortController 在 fetch 中需要手动传)、统一错误结构。
- 如果你项目已用 Vue 3 + Composition API,
useAxios(@vueuse/core)能简化很多样板 - 但若只发几个简单请求,引入
axios反而增加包体积(约 5 kB gzipped),得不偿失 -
fetch的AbortController支持是完整的,但写法比axios.cancelToken(已废弃)或CancelToken.source()更啰嗦
真正容易被忽略的点:HTTP 缓存行为。GET 请求默认可被浏览器缓存,导致重复调用返回旧数据;必要时加时间戳参数或设置 cache: 'no-store',别等线上出 bug 才想起来查 Network 面板里的 “from disk cache”。
# vue
# javascript
# java
# js
# 前端
# json
# cookie
# 浏览器
# app
# access
# axios
# include
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
英语简历制作免费网站推荐,如何将简历翻译成英文?
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
如何快速登录WAP自助建站平台?
Python面向对象测试方法_mock解析【教程】
如何在建站主机中优化服务器配置?
如何在IIS中配置站点IP、端口及主机头?
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Laravel模型事件有哪些_Laravel Model Event生命周期详解
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Laravel怎么实现模型属性的自动加密
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
浅谈redis在项目中的应用
Laravel如何与Inertia.js和Vue/React构建现代单页应用
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
深圳网站制作的公司有哪些,dido官方网站?
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
高端建站三要素:定制模板、企业官网与响应式设计优化
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Laravel如何使用Telescope进行调试?(安装和使用教程)
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
如何构建满足综合性能需求的优质建站方案?
如何在橙子建站中快速调整背景颜色?
Python3.6正式版新特性预览
Linux系统命令中tree命令详解
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
如何快速搭建虚拟主机网站?新手必看指南
EditPlus中的正则表达式 实战(4)
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
高防服务器如何保障网站安全无虞?
深圳网站制作平台,深圳市做网站好的公司有哪些?
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
如何在建站宝盒中设置产品搜索功能?
中国移动官方网站首页入口 中国移动官网网页登录
如何在云服务器上快速搭建个人网站?
Laravel怎么实现验证码(Captcha)功能
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
Laravel怎么上传文件_Laravel图片上传及存储配置
Swift中swift中的switch 语句
北京网站制作的公司有哪些,北京白云观官方网站?
如何快速搭建高效可靠的建站解决方案?
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
如何在腾讯云服务器上快速搭建个人网站?
如何在腾讯云免费申请建站?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Laravel如何升级到最新版本?(升级指南和步骤)
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】

