什么是API_如何使用javascript发起网络请求【教程】

发布时间 - 2026-01-26 00:00:00    点击率:
API是约定的通信规则;JavaScript用fetch或XMLHttpRequest调用Web API;fetch更现代简洁,需手动处理cookie、JSON解析、HTTP错误及URL参数,POST传JSON须设Content-Type并序列化body。

API 不是某种工具或代码,它是一套约定好的通信规则——就像餐厅的菜单,你点菜(发请求),厨房按标准流程做(服务器处理),再把成品端给你(返回数据)。JavaScript 本身不“有” API,但它能通过 fetchXMLHttpRequest 调用 Web API 发起网络请求。

什么时候该用 fetch 而不是 XMLHttpRequest

fet

ch 是现代浏览器的标准方案,语法简洁、基于 Promise,适合绝大多数场景;XMLHttpRequest 主要用于需要精细控制上传进度、取消请求或兼容 IE10/11 的老项目。

  • fetch 默认不带 cookie,需显式加 credentials: 'include' 才能携带登录态
  • fetch 返回的 Response 对象不是 JSON,必须调用 .json()(或 .text())才能读取内容,否则只是个流对象
  • fetch 只在网络错误(如断网、DNS 失败)时 reject,HTTP 状态码 404、500 不会触发 catch,得手动检查 response.ok

fetch 发 GET 请求的典型写法和常见坑

最简 GET 示例:

fetch('/api/users')
.then(res => {
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
})
.then(data => console.log(data))
.catch(err => console.error('请求失败:', err));

  • URL 中的查询参数必须手动拼接或用 URLSearchParams 构造,fetch 不自动处理对象参数
  • 中文或特殊字符要先 encodeURIComponent,否则可能被截断或报 400
  • 如果后端返回的是纯文本(比如 CSV)、XML 或 Blob,别硬调 .json(),会抛错

POST 提交 JSON 数据时必设的两个头

发送 JSON 必须同时满足:

fetch('/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ email: 'a@b.c', password: '123' })

  • 'Content-Type': 'application/json' 告诉后端“我传的是 JSON”,否则后端可能解析为空对象
  • body 必须是字符串,JSON.stringify() 不可省略;直接传对象会变成 [object Object]
  • 如果后端要求 form-data,就别用 JSON.stringify,改用 FormData 实例,且不要设 Content-Type(浏览器会自动生成带 boundary 的头)

真正容易出问题的,往往不是语法,而是对状态码、响应体类型、跨域限制、cookie 携带逻辑这些隐性契约的理解偏差。多看一眼 res.headers.get('content-type')res.status,比反复重试更省时间。


# javascript  # word  # java  # js  # json  # cookie  # 浏览器  # app  # 工具  # 后端  # csv  # ai  # dns 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  利用 Google AI 进行 YouTube 视频 SEO 描述优化  教学论文网站制作软件有哪些,写论文用什么软件 ?  七夕网站制作视频,七夕大促活动怎么报名?  Laravel观察者模式如何使用_Laravel Model Observer配置  Laravel如何实现用户注册和登录?(Auth脚手架指南)  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  JS实现鼠标移上去显示图片或微信二维码  北京网站制作公司哪家好一点,北京租房网站有哪些?  原生JS获取元素集合的子元素宽度实例  Laravel模型事件有哪些_Laravel Model Event生命周期详解  简单实现jsp分页  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  如何利用DOS批处理实现定时关机操作详解  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  如何快速搭建高效简练网站?  如何在万网利用已有域名快速建站?  如何在Windows虚拟主机上快速搭建网站?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  香港服务器租用费用高吗?如何避免常见误区?  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  如何彻底卸载建站之星软件?  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Linux安全能力提升路径_长期防护思维说明【指导】  Laravel如何实现一对一模型关联?(Eloquent示例)  Laravel怎么实现验证码(Captcha)功能  深入理解Android中的xmlns:tools属性  如何自定义建站之星网站的导航菜单样式?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  如何批量查询域名的建站时间记录?  如何在Windows 2008云服务器安全搭建网站?  如何在阿里云虚拟主机上快速搭建个人网站?  BootStrap整体框架之基础布局组件  魔方云NAT建站如何实现端口转发?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Bootstrap整体框架之JavaScript插件架构  无锡营销型网站制作公司,无锡网选车牌流程?  javascript中闭包概念与用法深入理解  Laravel Fortify是什么,和Jetstream有什么关系  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集