Изменение значения глобальной переменной javascript - PullRequest
0 голосов
/ 22 июля 2010

Я пытаюсь изменить значение глобальной переменной внутри функции 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 Ответ

1 голос
/ 22 июля 2010

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, возможно, уже бежал.Перемещая этот код в функцию обратного вызова, мы гарантируем, что он выполняется в нужное время.Также обратите внимание, что мы можем устранить глобальные.

...