改变全局javascript变量的值

时间:2010-07-22 05:34:01

标签: javascript jquery google-visualization

我试图在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});

}

谢谢!

1 个答案:

答案 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可能已经运行。通过将此代码移动到回调函数中,我们确保它在正确的时间运行。另请注意,我们可以消除全局。