我正在网页上画几个图表,但是控制台随机出现以下错误:
我尝试只显示一个图表来缩小问题范围,但仍然经常出现错误消息并且没有绘制任何图表,约50%的时间。当没有出现错误时,图表会正确绘制。
我已阅读多个论坛和此文档,但我看不出哪里有问题。我的代码基本上与所提到的文档相同,除了我的函数在
以下是我(简化后)的一些代码:
MyPage.php:
在 home.js 中:
TypeError: google.visualization.DataTable is not a constructor
我尝试只显示一个图表来缩小问题范围,但仍然经常出现错误消息并且没有绘制任何图表,约50%的时间。当没有出现错误时,图表会正确绘制。
我已阅读多个论坛和此文档,但我看不出哪里有问题。我的代码基本上与所提到的文档相同,除了我的函数在
setOnLoadCallback
之前声明,否则它们将变成undefined
。以下是我(简化后)的一些代码:
MyPage.php:
<!DOCTYPE html>
<html>
<head>
// loading CSS
</head>
<body>
<p>My page content...</p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script src="/js/home.js" type="text/javascript"></script>
// loading more scripts (moment.js, query.countdown.js, bootstrap.js...)
</body>
</html>
在 home.js 中:
$(document).ready(function(){
if (window.location.href == 'XXXXXController') {
// This chart draws a dual axis chart showing revenues and expenses
function drawRevenuesExpenses() {
var jsonData = $.ajax({
type: "POST",
url: "/draw_dual_lineChart",
data: "someParameters",
dataType:"json"
}).done(function (jsonData) {
// Create our data table out of JSON data loaded from server.
var data_chart = new google.visualization.DataTable(jsonData[0]['data']);
// Set chart's options
var options = jsonData[1]['options'];
// Instantiate and draw the chart
var chart = new google.visualization.LineChart(document.getElementById('dual_chart_revenues_expenses'));
chart.draw(data_chart, options);
});
}
// This chart draws the resort's affluence (number of tourists per day)
function drawAffluence() {
var jsonData = $.ajax({
type: "POST",
url: "/draw_single_lineChart",
data: "someParameters",
dataType:"json"
}).done(function (jsonData) {
// Create our data table out of JSON data loaded from server.
var data_chart = new google.visualization.DataTable(jsonData[0]['data']);
// Set chart's options
var options = jsonData[1]['options'];
// Instantiate and draw the chart
var chart = new google.visualization.LineChart(document.getElementById('single_chart_affluence'));
chart.draw(data_chart, options);
});
}
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawRevenuesExpenses);
//google.charts.setOnLoadCallback(drawAffluence);
}
}
$(document).ready
,删除了所有的setOnLoadCallback
并直接在load
语句中加载drawCharts
,但是我仍然遇到了同样的问题。有两件事需要提一下:我需要在drawCharts
函数之后放置load
语句,否则它会变成未定义;而且简单的 F5 刷新总是触发错误。当我刷新缓存(在 Firefox 中按 CTRL+R)时,图表就能正常显示。我怀疑是加载文件/模块时出了问题... - remyremy<script>
。我猜如果我在它们之间加载一些其他文件也没关系?或者Google的文件必须是最后一个加载的吗?我已经编辑了我的问题并附上了页面布局。 - remyremy