两个 script 标签搞定 axios CDN 引入:选型、锁定版本与兜底方案
【免费下载链接】axiosPromise based HTTP client for the browser and node.js项目地址: https://gitcode.com/GitHub_Trending/ax/axios
不想装构建工具,只想让一个静态 HTML 页直接发出 HTTP 请求?axios CDN 引入是最快的路子:挑一个 CDN、贴一行 script 标签、锁死版本号,浏览器里立刻能用。这篇教你:
- 30 秒在 jsDelivr 和 unpkg 之间做出选择
- 把版本号锁死,并给页面加一条备用 CDN 的兜底逻辑
- 拿到两段能直接粘贴的 GET / POST 代码
30 秒速览:先选型,再动手
两个平台默认入口都是压缩后的dist/axios.min.js,差别在速度和缓存行为:
| 维度 | jsDelivr | unpkg |
|---|---|---|
| 节点分布 | 全球 CDN 分发,国内访问快 | npm 官方托管,按请求转发,国内偏慢 |
| 版本锁定 | 支持@版本号 | 支持@版本号 |
| 缓存行为 | 强缓存 + 定期刷新 | 依赖浏览器缓存,首屏偶有延迟 |
说白了:国内部署选 jsDelivr,海外用户为主选 unpkg,本文代码默认走 jsDelivr。
落地第一步:写对 script 标签
版本号必须写进 URL——这是 CDN 引入 axios 最容易翻车的一点。axios 1.x 内部接口有过多次调整,不锁版本等于把页面稳定性交给运气。写法是路径前加@1.6.7,以后要升级只改一个数字。
标签下面紧跟两行兜底逻辑:如果 jsDelivr 挂了,document.write会同步从 unpkg 拉同一个版本;加载成功的正常情况不会触发第二行。
落地第二步:发第一个 GET 请求
标签写对后,全局变量axios就有了。下面这个最小片段可以整段粘进任意静态页:
<!-- 锁定版本号的写法:@1.6.7,升级只改这里 --> <script src="https://cdn.jsdelivr.net/npm/axios@1.6.7/dist/axios.min.js"></script> <!-- 三行代码实现备用 CDN:主源加载失败才同步执行 --> <script>window.axios || document.write('<script src="https://unpkg.com/axios@1.6.7/dist/axios.min.js"><\/script>')</script> <script> // 发第一个 GET 请求,响应体自动解析成 JSON axios.get('https://httpbin.org/get') .then(function (response) { console.log(response.status, response.data); }) .catch(function (err) { // 网络错误和 4xx/5xx 都会走到这里 console.error('请求失败:', err.message); }); </script>项目仓库里的 官方 GET 示例 用的就是这种"script 标签 + 全局 axios"的用法,把它里的本地路径换成上面的 CDN 地址即可。
落地第三步:再发一个 POST 请求
发数据时不用手动JSON.stringify:axios 看到对象会自动序列化成 JSON,并把请求头设为application/json,你只要传对象就行:
<script> // data 是任意对象,axios 自动转 JSON 并带上 Content-Type axios.post('https://httpbin.org/post', { name: '张三', email: 'zhangsan@example.com' }) .then(function (res) { // 服务端回显的内容就在 res.data 里 console.log(res.data); }) .catch(function (err) { console.error('提交失败:', err.message); }); </script>⚡ 三个高频坑:现象、原因、解法
现象:控制台报 CORS error,response.data永远拿不到。原因:浏览器禁止跨域读响应,这是服务端策略,不是 axios 的问题。解法:让接口方给目标域名加 CORS 响应头;接口不支持跨域时,改走同源代理。
现象:页面里axios方法时灵时不灵,拦截器互相看不见。原因:多个 script 标签引入了不同版本的 axios,后加载的覆盖了先加载的。解法:全项目统一同一版本号的写法,只保留一个加载入口。
现象:CDN 脚本加载失败,axios is not defined,页面白屏。原因:网络波动或 CDN 节点故障,标签加载是静默失败的。解法:保留上面的备用 CDN 兜底;上线前再手动打开一次控制台确认window.axios存在。
🛠️ 进阶一瞥:拦截器
生产代码里,"每个请求带 token、401 统一跳登录"这种横切逻辑放在拦截器里最合适,写一次全局生效:
// 请求拦截器:发出去之前统一加工配置 axios.interceptors.request.use(function (config) { config.headers.Authorization = 'Bearer ' + token; return config; }); // 响应拦截器:401 在这里统一处理,业务代码不用重复写 axios.interceptors.response.use( function (response) { return response; }, function (error) { if (error.response && error.response.status === 401) { location.href = '/login'; } return Promise.reject(error); } );收尾
一行锁定版本的 script 标签,加上备用 CDN 的兜底逻辑,就是 axios CDN 集成的全部家当:选型、锁版本、留后路,三件事做完页面就交给你自己的业务代码了。
- 参考资料:Axios 官方文档 README
- 参考资料:jsDelivr(cdn.jsdelivr.net)
- 参考资料:unpkg(unpkg.com)
- 参考资料:仓库内 examples 目录的 GET / POST 示例
【免费下载链接】axiosPromise based HTTP client for the browser and node.js项目地址: https://gitcode.com/GitHub_Trending/ax/axios
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考