Google Chart首次加载报错:Cannot read property '0' of undefined 求助
嘿,这个问题我之前帮朋友排查过好几次,大概率是这几个时序或数据相关的坑导致的:
数据与图表渲染的时序不匹配
这是最常见的情况!比如你用AJAX从后端拉取图表所需数据,但图表初始化代码(比如调用google.visualization.arrayToDataTable())没等AJAX请求返回就提前执行了。这时候数据还是undefined,自然会抛出“Cannot read property '0' of undefined”的错误。刷新或调整窗口时,要么浏览器缓存了数据,要么重新触发渲染时数据已经加载完成,所以图表就能正常显示了。Google Charts库未加载完整就执行渲染
如果你没把渲染逻辑放在google.charts.load()的回调函数里,而是直接写在引入库的脚本标签后面,就容易踩这个坑。网络波动或浏览器加载顺序的差异,会导致google.visualization这类核心对象还未初始化完成,你的代码就去调用它的方法了。Chrome每次首次打开都会重新请求脚本,所以更容易触发这个问题,而IE的缓存机制可能让它只报错一次。图表容器DOM未准备就绪
图表渲染需要挂载到页面上的某个DOM容器(比如<div id="chart-container"></div>),如果你的渲染代码执行时,这个容器还没被浏览器解析渲染出来,Google Chart可能无法正确获取容器的引用或尺寸,间接导致数据处理环节出错。调整窗口大小会触发图表的重绘逻辑,这时候容器已经存在,所以就能正常显示了。首次加载的数据格式异常
有时候后端返回的数据在首次请求时可能存在问题——比如数组为空、嵌套层级不对,或者某个必填字段缺失。刷新时数据可能因为缓存或者后端返回稳定了,格式就符合要求了。那个“0x800a138f - JavaScript runtime error: Unable to get property 'ar...’”的报错,大概率是Google Chart内部处理异常数据时,某个内部对象未初始化,进而找不到对应的属性。
内容的提问来源于stack exchange,提问作者chosenOne Thabs

