应优先使用 fetch,因其原生、简洁、轻量;需检查 response.ok 处理 HTTP 错误;批量拼接字符串赋值 innerHTML 提升渲染性能;file:// 协议下需本地服务支持 CORS。

直接用 fetch 就行,别绕弯——现代浏览器全支持,比 XMLHttpRequest 简洁,比 Axios 轻量,且不用额外加载 CDN。
为什么不用 Axios 或 jQuery.ajax?
除非你已经在项目里用了 Axios,否则为单个 HTML 模板引入 axios.min.js(约 14KB)纯属冗余。jQuery 更不用提,连 fetch 都不支持的旧浏览器(IE11 及以下)现在基本可忽略。实际开发中,95% 的静态 HTML 数据展示场景,fetch + async/await 组合足够稳、够快、够清晰。
- Axios 额外增加网络请求、缓存、CDN 延迟风险;错误堆栈还多一层包装,调试时反而绕路
- jQuery.ajax 在无构建流程的纯 HTML 场景下,要手动管理版本、防冲突、处理 Promise 兼容性
-
fetch是浏览器原生 API,无需安装、无需配置、开箱即用
fetch 必须检查 response.ok,否则 404/500 会静默成功
这是最常踩的坑:很多人以为 fetch(url).then(...) 进入 then 就代表请求“成功”,其实不是。fetch 只在网络层失败(如断网、CORS 拒绝)时才进 catch;HTTP 状态码 404、500、401 等仍会走 then 分支,但 response.ok === false。
- 务必在第一个
then里加if (!response.ok) throw new Error(...) - 不要依赖
response.status === 200,用response.ok更语义化 - 错误提示建议带状态码,比如
throw new Error(`HTTP ${response.status}`)
渲染性能:批量拼接字符串再赋值 innerHTML,别循环 appendChild
对小数据(比如 ≤50 条),两种方式感知不强;但一旦数据量上升或 DOM 结构复杂,循环追加节点会触发多次重排(reflow),明显卡顿。而一次性生成完整 HTML 字符串再写入 innerHTML,浏览器只做一次解析和渲染。
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
- 用
data.map(...).join('')构建字符串块... - 确保目标容器是空的或已清空(比如先设
tbody.innerHTML = '') - 避免在循环里反复读写
innerHTML,那等于重复解析 N 次
CORS 和本地文件打开问题(file:// 协议)
开发时双击打开 HTML 文件,浏览器地址栏显示 file:///xxx/index.html,此时 fetch 会因跨域策略被直接拦截——这不是 API 问题,是协议限制。必须通过本地服务访问(如 http://localhost:5000)。
- 用 Python 快速起服务:
python3 -m http.server 5000 - VS Code 安装 Live Server 插件,右键 → “Open with Live Server”
- Chrome 浏览器启动时加参数禁用安全策略(仅测试用,不推荐):
--unsafely-treat-insecure-origin-as-secure="file://" --user-data-dir=/tmp/chrome-test
真正麻烦的从来不是怎么写 fetch,而是忘记它默认不带 cookie、不发认证头、不自动重定向,以及在 file:// 下根本跑不起来——这些细节没卡过的人,大概还没真正在离线 HTML 里调过 API。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










