2013-10-01 45 views
5

今天Google圖表出現問題,所以我們試圖在無法加載js文件的情況下優雅地失敗。以下工作正常:異步加載Google jsapi

<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代碼只發生在一些頁面上,稍後會發生,所以我不認爲這會起作用,除非我們在我們需要它之前嘗試加載腳本,這會減慢這些頁面的速度。 –