html 无法直接调用 api,必须通过 javascript(如 fetch())发起请求;script src 加载 js 文件不是标准 api 调用,jsonp 已被 fetch + cors 取代;cors 错误源于服务端未授权,需后端配置响应头或使用代理解决。

HTML 本身不能直接调用 API,它只是静态标记语言,没有执行能力;所有实际的 HTTP 请求必须由 JavaScript 发起。
为什么 <script src="..."></script> 不算“调用 API”
很多人误以为用 <script src="https://api.example.com/data.js"></script> 就是调用了 API,其实这只是加载外部 JS 文件——前提是对方服务器**主动返回合法的 JavaScript 代码**(比如 JSONP 格式),且该代码会调用你预定义的全局函数。这不是标准 API 调用,而是绕过同源策略的遗留方案。
- 现代 API 返回的是 JSON、XML 等数据格式,不是可执行 JS,
<script></script>加载后会直接报语法错误 - JSONP 已基本被
fetch()+ CORS 取代,不支持 POST/PUT、无错误捕获、无法设请求头 -
<link rel="preload">或<img src="...">也不能读取响应体内容,只能触发请求
fetch() 是当前最直接的 API 调用方式
在 HTML 页面中嵌入 <script></script>,用 fetch() 发起请求,是最常见、最可控的做法。注意它默认不带 Cookie,跨域需服务端配合 Access-Control-Allow-Origin 响应头。
- GET 请求示例:
fetch("/api/users")<br> .then(r => r.json())<br> .then(data => console.log(data)); - 带凭证的请求要加
credentials: "include",否则登录态丢失 - 不要在
<script></script>标签里写异步逻辑后直接操作 DOM,确保元素已加载(可用DOMContentLoaded或把 script 放在 body 底部)
CORS 错误是前端调用 API 时最常卡住的地方
浏览器报错 Blocked by CORS policy 并不是你代码写错了,而是服务端没允许你的域名或请求方法。这个限制发生在浏览器层,fetch() 或 XMLHttpRequest 都无法绕过。
- 本地开发时常见:前端跑在
http://localhost:5173,API 在http://localhost:3000,必须后端配置允许该源 -
OPTIONS预检失败通常是因为服务端没处理非简单请求(如含Authorization头、Content-Type: application/json) - 代理(如 Vite 的
server.proxy或 Nginx 反向代理)是开发期最实用的规避手段,本质是让请求看起来“同源”
真正难的从来不是写几行 fetch(),而是理解谁控制请求头、谁决定响应头、谁承担鉴权逻辑——这些边界一旦模糊,问题就会卡在“明明接口在 Postman 里能通,网页里就是不行”。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











