我试图在javascript函数中更改全局变量的值,但是,似乎没有采用该值,我不知道为什么。 (不可否认,我不是一位经验丰富的javascript人员。)这是我的代码:
var title_chart = "";
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Country');
data.addColumn('number', 'Number of Entries');
jQuery.getJSON('/data/stats.json', function(chart_data) {
title_chart = chart_data.chart_title;
jQuery.each(chart_data.stats, function(index, value){
data.addRows(1);
data.setValue(index, 0, value.chart_label);
});
});
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, {width: 450, height: 300, title: title_chart});
}
谢谢!
答案 0 :(得分:1)
getJSON
是异步的。这样做:
jQuery.getJSON('/data/stats.json', function(chart_data) {
var title_chart = chart_data.chart_title;
jQuery.each(chart_data.stats, function(index, value){
data.addRows(1);
data.setValue(index, 0, value.chart_label);
});
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, {width: 450, height: 300, title: title_chart});
});
问题是getJSON
会立即返回。只有在稍后,当请求完成时,才会调用您的回调。在此期间,chart.draw
可能已经运行。通过将此代码移动到回调函数中,我们确保它在正确的时间运行。另请注意,我们可以消除全局。