Как я могу узнать, загружена ли визуализация Google? - PullRequest
9 голосов
/ 20 марта 2012

Я показываю диаграммы Google на некоторых веб-страницах.Но я не могу гарантировать, что мои клиенты будут иметь сетевой доступ к Google: клиентский компьютер будет находиться в той же локальной сети, что и мой веб-сервер (который может обращаться к Google), но я не гарантирую, что все клиенты будут иметь доступ за пределами локальной сети.

Я хотел бы показать данные с помощью Google Charts тем клиентам, которые могут получить к ним доступ, и обычную таблицу HTML для тех, кто этого не делает.

Я попытался установить для переменной значение falseи изменив его на true в методе, вызываемом при загрузке API визуализации Google:

var canAccessGoogleVisualizationVar = false;
google.load('visualization', '1', {packages: ['corechart'], callback: canAccessGoogleVisualization});
function canAccessGoogleVisualization() 
{
    canAccessGoogleVisualizationVar = true;
}

Но, похоже, он не работает.

Как узнать со стороны клиентаДоступна ли визуализация Google или нет?


Обновление: приведенный выше код не работал из-за следующего кода (который я ранее не публиковал, так как считал, что он не имеет смысла):

google.setOnLoadCallback(drawVisualization);

function drawVisualization() 
{
    // Check if Google Visualization is loaded
    if (!canAccessGoogleVisualizationVar) {
        alert('Can't access Google Visualization');
    }

    // The following code can be any of the samples from Google (see http://code.google.com/apis/ajax/playground/?type=visualization#pie_chart).
    var data = new google.visualization.DataTable();
    // Add columns and values to data
    ...
    // Call new google.visualization.AnyChartBuilderFromTheAPI(<element>).draw(data);
}

Я заметил, что мой код не работает, потому что, если canAccessGoogleVisualizationVar == true, ветвь if не будет взята, а если ее false, function drawVisualization() не будет выполнен.

Итак, я взял тест if вне функции:

google.setOnLoadCallback(drawVisualization);

function drawVisualization() 
{
    // Any drawVisualization unchanged from the samples from Google (see http://code.google.com/apis/ajax/playground/?type=visualization#pie_chart).
}

// Check if Google Visualization is loaded at the end of this <script> </script>
if (!canAccessGoogleVisualizationVar) {
    alert('Can't access Google Visualization');
}
</script>

Но теперь это не работает, потому что оценка if (!canAccessGoogleVisualizationVar) выполняется до , строка google.load(?, ?, canAccessGoogleVisualization); вызывает метод canAccessGoogleVisualization().

Как я могуубедитесь, что я читаю значение canAccessGoogleVisualizationVar после , попытавшись выполнить вызов google.load(...);?

1 Ответ

12 голосов
/ 05 декабря 2013

Вы можете попробовать

function canAccessGoogleVisualization() 
{
    if ((typeof google === 'undefined') || (typeof google.visualization === 'undefined')) {
       return false;
    }
    else{
     return true;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...