上一篇
场景引入:
小明刚学会用AJAX调接口,突然产品经理甩来需求:“先把这个本地JSON文件的数据渲染出来!” 😱 直接双击HTML打开页面时,浏览器却报错Cross origin requests are not supported
… 别慌!今天我们就来破解这个前端常见难题!
🔒 安全限制:现代浏览器默认禁止通过file://
协议直接访问本地文件(除非特殊配置),这是为了防止恶意脚本偷看你电脑里的文件。
💡 常见报错:
Access to XMLHttpRequest at 'file:///data.json' from origin 'null' has been blocked by CORS policy
适用场景:开发调试阶段
# 快速启动(需安装Node.js) npx http-server -p 8080
原理:通过http://localhost
访问文件,绕过CORS限制。
# Mac终端执行(路径替换为你的Chrome路径) open -a "Google Chrome" --args --allow-file-access-from-files
⚠️ 缺点:每次都要手动启动,不安全。
document.getElementById('fileInput').addEventListener('change', function(e) { const file = e.target.files[0]; const reader = new FileReader(); reader.onload = function() { const data = JSON.parse(reader.result); console.log(data); // 🎉 得到JSON数据 }; reader.readAsText(file); });
特点:需要用户手动选择文件,适合上传场景。
// 确保文件放在项目目录内(如public/data.json) fetch('./data.json') .then(response => response.json()) .then(data => console.log(data));
// 在Electron或Node环境中 const fs = require('fs'); const data = JSON.parse(fs.readFileSync('path/to/file.json'));
路径问题:
./data.json
→ 同级目录 ../assets/data.json
→ 上级目录的assets文件夹 文件编码:确保JSON文件是UTF-8格式,否则中文可能乱码。
缓存陷阱:修改JSON文件后,按Ctrl+F5
强制刷新浏览器缓存。
<!DOCTYPE html> <body> <input type="file" id="fileInput" accept=".json"> <script> // 方法3实现 document.getElementById('fileInput').addEventListener('change', (e) => { const file = e.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = () => { try { const data = JSON.parse(reader.result); console.log('解析成功', data); } catch (err) { console.error('JSON格式错误', err); } }; reader.readAsText(file); }); </script> </body>
方案 | 适用场景 | 难度 |
---|---|---|
本地服务器 | 日常开发 | |
Chrome参数 | 临时测试 | |
FileReader | 用户上传 | |
Electron | 桌面应用 |
💬 2025年8月更新:最新版Chrome 125+对本地文件限制更严格,推荐优先使用http-server
方案,遇到问题欢迎评论区交流~ ✨
(小彩蛋:JSON文件里藏个"emoji": "🚀"
字段会让调试心情变好哦!)
本文由 蒉玄穆 于2025-08-02发表在【云服务器提供商】,文中图片由(蒉玄穆)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/512584.html
发表评论