.NET升级Highcharts至11.4.7后图表加载失败,报TypeError错误
解决Highcharts升级至11.4.7后.NET应用中图表加载报错问题
针对你遇到的Uncaught TypeError: Cannot read properties of undefined (reading 'length')错误,结合代码在JSFiddle正常运行但.NET环境报错的场景,可从以下方向排查解决:
1. 确认Highcharts脚本加载的正确性
- 确保页面仅加载11.4.7版本的Highcharts核心脚本,彻底移除旧版本(v8.2)的脚本引用,避免版本冲突。
- 保证脚本加载顺序在图表渲染代码之前,比如将
<script src="https://code.highcharts.com/11.4.7/highcharts.js"></script>放在页面<head>标签内,或页面底部但在渲染函数之前。
2. 修正渲染代码中的潜在问题
(1)修正重复的函数名
渲染后的函数名为createChartchart()(重复了"chart"),虽在JSFiddle可正常执行,但在.NET页面中可能存在函数名冲突或解析异常,建议修改为简洁名称:
// 修正函数名 function createChart() { var ChartOptions = { "tooltip":{"pointFormat":"{point.y} - {point.custom1} - {point.custom2}"}, "chart":{"renderTo":"chart"}, "series":[{/* 原有series数据保持不变 */}], "yAxis":[{/* 原有yAxis配置保持不变 */}], "subtitle":{"text":"Source: WorldClimate.com","x":-20.0}, "title":{"text":"Monthly Average Temperature","x":-20.0}, "xAxis":[{/* 原有xAxis配置保持不变 */}], "legend":{"verticalAlign":"middle","layout":"vertical","align":"right","borderWidth":0.0} }; Highcharts.chart("chart", ChartOptions); } // 调整页面加载监听的调用 if (document.addEventListener) { document.addEventListener("DOMContentLoaded", createChart); } else if (document.attachEvent) { document.attachEvent("onreadystatechange", function(){ if (document.readyState === "complete"){ document.detachEvent("onreadystatechange", arguments.callee); createChart(); } }); }
(2)检查DOM元素存在性
在创建图表前先确认目标DOM元素已加载完成,避免因页面布局(如母版页异步加载)导致元素未就绪:
function createChart() { var chartEl = document.getElementById("chart"); if (!chartEl) return; // 元素不存在时直接返回,避免报错 var ChartOptions = { // 原有配置保持不变 }; Highcharts.chart(chartEl, ChartOptions); }
3. 排除自定义字段的兼容性问题
你的tooltip配置中引用了{point.custom1}和{point.custom2},但渲染后的series数据并未包含这两个字段。Highcharts 11.x对未定义字段的处理逻辑可能和v8.x不同,建议先注释这两个字段,测试基础图表能否加载:
"tooltip":{ // 先简化tooltip,测试基础功能 "pointFormat":"{point.y}" // "pointFormat":"{point.y} - {point.custom1} - {point.custom2}" },
4. 验证.NET Highcharts包装器的兼容性
你使用的HighchartsRenderer等.NET包装器可能未适配Highcharts 11.4.7版本,导致生成的配置代码存在兼容性问题。可尝试绕过包装器,直接在页面中编写纯JS的Highcharts配置,测试是否能正常加载,以此判断是否是包装器的问题。
内容的提问来源于stack exchange,提问作者Anju Raman
相关产品推荐
相关产品推荐

