You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:D3 v5中d3.json()回调代码未执行,无法加载GeoJSON

解决D3 v5中d3.json()回调代码不执行的问题

嘿,我之前也踩过这个坑!你的问题核心是D3 v5彻底改变了异步数据加载API的写法——它不再支持旧版本里直接传入回调函数的方式,而是改用Promise来处理异步操作,所以你写的那个回调函数根本不会被执行,浏览器自然就跳过了里面的代码。

为什么旧写法失效?

在D3 v4之前,d3.json()确实支持传入回调函数,但从v4开始就逐步转向Promise,到v5更是完全移除了回调参数的支持。你现在的写法是旧版本的用法,在v5里完全不生效。

正确的写法有两种:

1. 使用Promise的.then()链式调用

这是最常用的方式,符合D3 v5的API规范:

d3.json("/trip_animate/tripData.geojson")
  .then(function(data) {
    console.log("It just works");
    // 在这里编写你的绘图逻辑,比如生成路径、绑定数据等
  })
  .catch(function(error) {
    // 一定要加上错误处理,排查加载失败的原因
    console.error("GeoJSON文件加载失败:", error);
  });

2. 使用async/await语法(更简洁)

如果你的代码在异步函数中,可以用await来简化异步操作:

async function loadTripData() {
  try {
    const data = await d3.json("/trip_animate/tripData.geojson");
    console.log("It just works");
    // 后续的绘图代码写在这里
  } catch (error) {
    console.error("GeoJSON文件加载失败:", error);
  }
}

// 调用这个异步函数
loadTripData();

额外排查要点

  • 打开浏览器的Network面板,查看GeoJSON文件的请求状态:如果是404,说明文件路径写错了;如果是跨域错误,说明你直接用file://协议打开本地文件,需要启动一个本地服务器(比如用Python的python -m http.server)来加载文件。
  • 确认D3 v5的脚本已经正确引入,没有版本冲突。

内容的提问来源于stack exchange,提问作者camelCaseCowboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:33:06