未定义 setOnLoadCallback 的 Google 可视化

Suj*_*dke 4 javascript charts undefined google-visualization

我正在使用 Google Geocharts 并按照 Google 的文档(https://developers.google.com/chart/interactive/docs/gallery/geochart?hl=en)来设置这样的图表:

google.charts.load('current', {'packages':['geochart']});
google.setOnLoadCallback(drawRegionsMap);

function drawRegionsMap() {

 ...
  var data = google.visualization.arrayToDataTable(a1);
  var options = {};

  var chart = new google.visualization.GeoChart(document.getElementById('div_geochart'));

  chart.draw(data, options);
};
Run Code Online (Sandbox Code Playgroud)

数组a1是全局定义的。脚本包含行出现在标题中。问题是,有时,我收到一条错误消息:

Uncaught TypeError: Cannot read property 'arrayToDataTable' of undefined

并且图表未加载。真正的问题是很难查明问题,因为它并不总是发生。似乎有时 google.visualization 尚未设置?但是使用setOnLoadCallback调用drawRegionsMap的全部意义不就是在 google.visualization 成功设置后调用它吗?

我确实尝试更改setOnLoadCallback行的位置,如下所述:Google Visualization - TypeError: Cannot read property 'DataTable' of undefined [Chrome specific]。我还将这两行放在<head>页面的部分中,但有时仍然会出现错误(在 Chrome 和 IE 中测试)。

有人可以给我一些关于如何避免出现此错误的提示吗?

dla*_*rte 6

请注意, google.setOnLoadCallback 与 google 不同。图表.setOnLoadCallback。如果您使用 google.charts.load(),则还需要使用 google.charts.setOnLoadCallback()。他们一起去。

此外,由于您使用的是 GeoChart,您可能仍需要加载 jsapi 加载器,该加载器用于通过 Google 地图加载地理编码数据。但是,对于最新版本,这不再适用,但如果您使用的是旧版本,则仍然适用。所以你的文档应该是这样的:

    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['geochart']});
      google.charts.setOnLoadCallback(drawSomeGeoChart);
      function drawSomeGeoChart() {
         ...
      }
    </script>
Run Code Online (Sandbox Code Playgroud)