2013-10-01 2 views
5

Сегодня была проблема с диаграммами Google, поэтому мы пытаемся с ошибкой изящно, если мы не можем загрузить файл js. Следующее работает отлично:Загрузка jsapi Google асинхронно

<script type="text/javascript" src="https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221.0%22%2C%22packages%22%3A%5B%22corechart%22%5D%7D%5D%7D"></script> 

Проблема заключается в том, что он будет блокировать работает другой код, как он ждет сценария тайм-аут.

Код ниже нагрузок,

<script type="text/javascript"> 
$.ajax({ 
    url: 'https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221.0%22%2C%22packages%22%3A%5B%22corechart%22%5D%7D%5D%7D', 
    dataType: 'script', 
    cache: true, // otherwise will get fresh copy every page load 
    success: function() { 
     google.load("visualization", "1", {packages:["corechart"]}); 
    } 
}); 
</script> 

но ошибки, когда я пытаюсь использовать визуализацию, такую ​​как

var data = new google.visualization.DataTable(); 

Это то, что я делаю, возможно, или мы застряли с проблемой если у Google возникают проблемы, нам просто нужно ждать, пока файл js перейдет в режим ожидания и продолжит работу?

Спасибо!

ответ

1

Ваш скрипт не будет выполняться после его загрузки через AJAX. Вы хотите использовать $.getScript():

$.ajaxSetup({ cache: true }); 
var url = 'https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221.0%22%2C%22packages%22%3A%5B%22corechart%22%5D%7D%5D%7D'; 
$.getScript(url, function() { 
    google.load("visualization", "1", {packages:["corechart"]}); 
}); 
+0

К сожалению, новый для размещения на переполнение стека. Я подумал, что это мне по электронной почте. Тогда я забыл об этом вопросе. К сожалению, код drawChart происходит только на некоторых страницах и позже, поэтому я не думаю, что это сработает, если мы не попробуем загрузить скрипт непосредственно перед тем, как мы его захотим, что замедлит эти страницы. –

4

Поскольку вы звоните в google.load функцию на успех, ?autoload=... материал является излишним.

Просто измените свой адрес в //www.google.com/jsapi, и добавить 'callback' к load вызова, чтобы убедиться, что ваш drawChart код вызывается, когда corechart не завершится.

Вот JSFiddle и фрагмент кода: http://jsfiddle.net/c56pC/2/

<script type="text/javascript"> 
$.ajax({ 
    url: '//www.google.com/jsapi', 
    dataType: 'script', 
    cache: true, 
    success: function() { 
     google.load('visualization', '1', { 
      'packages': ['corechart'], 
      'callback': drawChart 
     }); 
    } 
}); 
</script> 
+0

Извините, новый для публикации в переполнении стека. Я подумал, что это мне по электронной почте. Тогда я забыл об этом вопросе. К сожалению, код drawChart происходит только на некоторых страницах и позже, поэтому я не думаю, что это сработает, если мы не попробуем загрузить скрипт непосредственно перед тем, как мы его захотим, что замедлит эти страницы. –

Смежные вопросы