根本原因是chrome出于安全限制,禁止file://协议页面发起fetch或xmlhttprequest请求。解决方法包括:①用http-server起本地http服务;②以--allow-file-access-from-files参数启动chrome;③vs code用户使用live server插件。

你在本地开发时用Chrome直接双击打开HTML页面,再通过fetch或jQuery.getJSON加载同目录下的data.json文件,结果控制台报错“Failed to load resource: net::ERR_FILE_NOT_FOUND”或“Unexpected token
根本原因:Chrome主动拦截本地file://协议下的AJAX请求
Chrome出于安全考虑,默认禁止所有以file://开头的页面发起XMLHttpRequest或fetch请求——哪怕目标文件就在同一文件夹里。它会直接中断连接,不发请求、不返回数据、也不触发onerror回调,只在Console里扔一条模糊的net::ERR_FILE_NOT_FOUND错误。
这和Firefox、Edge不同:Firefox允许本地AJAX;Edge从110版本起也已放宽限制;唯独Chrome坚持最严策略。
验证是否为跨域拦截
打开开发者工具→Console标签页,执行:fetch('./data.json').then(r => r.text()).catch(e => console.error(e))。
如果报错信息含net::ERR_FILE_NOT_FOUND或Failed to fetch且无Network请求记录,说明被浏览器拦截;若出现Unexpected token ,则是服务器返回了HTML(比如404页面),属于路径错误或服务未启动。
三种可立即生效的解决方法
方法一:用http-server快速起一个本地HTTP服务(推荐)
① 打开终端,进入你的项目根目录(包含index.html和data.json的文件夹)
② 执行 npm install -g http-server 安装命令行工具(如已安装跳过)
③ 运行 http-server -p 8080 启动服务,端口可自选
④ 浏览器访问 http://localhost:8080,此时所有AJAX请求将正常发出并收到响应
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
注意:不要关闭终端窗口,关闭即服务停止;刷新页面时地址栏必须是http://开头,不能是file://。
方法二:使用Chrome启动参数临时绕过(仅限开发调试)
关闭所有Chrome窗口 → 在命令行中输入以下完整命令启动:
chrome.exe --user-data-dir=/tmp/chrome-dev --unsafely-treat-insecure-origin-as-secure="file://" --user-data-dir=/tmp/chrome-dev --allow-file-access-from-files
Windows用户需将chrome.exe替换为Chrome实际安装路径,例如:"C:\Program Files\Google\Chrome\Application\chrome.exe"。
【警告】此方式禁用关键安全机制,切勿用于日常上网或打开不可信网页。
方法三:改用Live Server插件(VS Code用户专属)
在VS Code中右键点击index.html → 选择“Open with Live Server” → 自动在http://127.0.0.1:5500打开页面
该插件内置轻量HTTP服务,支持热重载,且默认允许同域JSON读取,无需额外配置










