C3 Chart从URL加载数据时触发TypeError错误,寻求技术帮助
解决C3图表加载CSV时的
d3.request is not a function错误 嘿,这个问题我碰到过!咱们一步步来解决它~
错误原因剖析
你看到的Uncaught TypeError: $$.d3.request is not a function,核心问题是C3和你使用的D3版本不兼容:
- 早期C3版本依赖D3的
d3.requestAPI来加载远程数据 - 但D3 v5及以上版本已经彻底移除了
d3.request,换成了d3-fetch系列方法(比如d3.csv()) - 当C3尝试调用一个不存在的方法时,自然就抛出了这个错误
另外还要提一句:你的grade_year.csv格式也有问题,标准CSV应该是每行一条数据,列用逗号分隔,你原来的写法会导致C3无法正确解析。
解决方案
方案1:降级D3到兼容版本(最简单)
如果不想改动太多代码,直接把D3换成v4.x版本,和C3的经典版本搭配使用:
<!-- 引入兼容的D3和C3版本 --> <script src="https://d3js.org/d3.v4.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.20/c3.min.js"></script> <!-- 你的原有代码可以直接用 --> <script> var chart = c3.generate({ bindto: '#chart', data: { url: 'static/CSV/Chart_data/grade_year.csv' } }); </script>
同时修正你的grade_year.csv为标准格式:
AC_YEAR,Calculus 2010,5.718 2011,6.052 2012,5.29 2013,5.238 2014,5.037 2015,4.919
方案2:保留新版D3,手动加载数据传给C3
如果你想继续使用D3 v5+,可以自己用D3的d3.csv()先加载数据,再转换成C3需要的格式传入:
<!-- 引入新版D3和C3 --> <script src="https://d3js.org/d3.v7.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.20/c3.min.js"></script> <script> // 先用D3加载CSV数据 d3.csv('static/CSV/Chart_data/grade_year.csv') .then(function(rawData) { // 转换成C3需要的columns格式 var yearColumn = ['AC_YEAR']; var calculusColumn = ['Calculus']; rawData.forEach(function(row) { yearColumn.push(row.AC_YEAR); calculusColumn.push(parseFloat(row.Calculus)); }); // 生成C3图表 var chart = c3.generate({ bindto: '#chart', data: { columns: [yearColumn, calculusColumn] } }); }) .catch(function(err) { console.error('加载CSV出错了:', err); }); </script>
额外检查项
- 确认
static/CSV/Chart_data/grade_year.csv的路径正确,在浏览器地址栏输入这个路径能直接下载/查看文件,避免404错误 - 如果是本地开发,注意跨域问题(比如用
file://打开页面可能无法加载本地CSV,建议用本地服务器比如python -m http.server启动)
内容的提问来源于stack exchange,提问作者MTT
相关产品推荐
相关产品推荐

