问题
Like i mentioned in the title i get an error in the chart but no mesage so i cant fix it. Also the chart is function well. Here is a picture of the chart. it looks fine and the onhover and onclick functions of the chart are working too.
Here is my JS for the chart. The tabs may be a bit weird because of the way im inserting it in to stackoverflow. Its almost the same as the example charts. I have added listener to check if window size changes and i have a few buttons on the page that give the json call a value to query with.finally there is a function to get $_GET variables.
var clicked = false;
var nr = "";
$(function () {
$('button[id^="chart_button"]').on('click', function (e) {
clicked = true;
nr = $(this).attr('id');
drawChart();
});
//check window size
if (document.addEventListener){
window.addEventListener("resize", drawChart);
}else if (document.attachEvent){
window.attachEvent("onresize", drawChart);
}else{
window.resize = drawChart;
}
});
function getstart(){
if(clicked){
return $('#'+nr).attr('value');
}
return $('#tabbuttongroup').children().first().attr('value');
}
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var jsonData = $.ajax({
dataType: "json",
url: "modules/Forecast/models/getForecastChart.php",
data: {
id: getQueryVariable('record'),
start_date: getstart()
},
async: false
}).responseText;
var mydata = $.parseJSON(jsonData);
var data = new google.visualization.DataTable();
data.addColumn("datetime", "Date");
data.addColumn("number", "Actual Amount");
data.addColumn("number", "Forecast Amount");
data.addColumn("number", "Actual Price");
data.addColumn("number", "Forecast Price");
for(var i = 0; i < mydata['forecast'].length; i++){
var datesplit = String(mydata['forecast'][i][2]).split('-');
var date = new Date(datesplit[0], datesplit[1]-1, datesplit[2]);
data.addRow([
date,
Number(mydata['actual'][i][5]),
Number(mydata['forecast'][i][5]),
Number(mydata['actual'][i][6]),
Number(mydata['forecast'][i][6])
]);
}
var options = {
bars: 'vertical',
hAxis: {
title: "Date",
gridlines: {
count: -1,
units: {
days: {
format: ["dd MMM"]
}
}
}
},
vAxis: {
format: 'decimal'
},
colors: ['#00AAFF', '#0088FF', '#EEDD55', '#EEBB55']
};
var chart = new google.charts.Bar(document.getElementById('chart_div'));
chart.draw(data, options);
}
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
alert('Query Variable ' + variable + ' not found');
}
回答1:
you can listen for the 'error'
event on the chart, which may provide more details
google.visualization.events.addListener(chartInstance, 'error', handler);
handler
will receive an argument with two properties, id
& message
you can then removeError
using the id
or simply removeAll
using the chart container
also, when using Material charts, you should convert the options...google.charts.Bar.convertOptions(options)
(note the difference in the gridlines)
see following example...
google.charts.load('current', {'packages':['bar']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var mydata = {forecast: [
[new Date(2016,04,31), 5, 6, 7, 8],
[new Date(2016,05,01), 4, 8, 9, 8],
[new Date(2016,05,02), 8, 4, 0, 6],
[new Date(2016,05,03), 2, 2, 1, 3]
]};
var data = new google.visualization.DataTable();
data.addColumn("datetime", "Date");
data.addColumn("number", "Actual Amount");
data.addColumn("number", "Forecast Amount");
data.addColumn("number", "Actual Price");
data.addColumn("number", "Forecast Price");
for(var i = 0; i < mydata['forecast'].length; i++){
data.addRow([
mydata['forecast'][i][0],
mydata['forecast'][i][1],
mydata['forecast'][i][2],
mydata['forecast'][i][3],
mydata['forecast'][i][4]
]);
}
var options = {
bars: 'vertical',
hAxis: {
title: "Date",
gridlines: {
count: -1,
units: {
days: {
format: ["dd MMM"]
}
}
}
},
vAxis: {
format: 'decimal'
},
colors: ['#00AAFF', '#0088FF', '#EEDD55', '#EEBB55']
};
var container = document.getElementById('chart_div');
var chart = new google.charts.Bar(container);
// throw error for testing
google.visualization.events.addListener(chart, 'ready', function () {
throw new Error('Test Google Error');
});
// listen for error
google.visualization.events.addListener(chart, 'error', function (err) {
// check error
console.log(err.id, err.message);
// remove error
google.visualization.errors.removeError(err.id);
// remove all errors
google.visualization.errors.removeAll(container);
});
// convert options
chart.draw(data, google.charts.Bar.convertOptions(options));
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div"></div>
来源:https://stackoverflow.com/questions/37543623/google-chart-error-without-message-or-error-id