2015-06-24 50 views
4

這幾乎是它,這個調用似乎沒有任何作用。google.setOnLoadCallback不起作用/不等待任何東西加載

如果我調試頁面在Chrome中,把一個斷點右後調用

google.load('visualization', '1.0', { packages: ['corechart', 'bar', 'table'] }); 

和字面等待5-10秒鐘的加載完成,然後進行,它是好的。否則,如果我讓「setOnLoadCallback」嘗試做的事情,它會拋出

'Uncaught TypeError: Cannot read property 'DataTable' of undefined'

的錯誤會被拋出:

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

編輯:

我也應該注意到,在所有當我撥打

時發現的例子
google.setOnLoadCallback(drawChart); 

所有的例子都如上,不包括括號'()'在t他最終的功能,即

google.setOnLoadCallback(drawChart()); 

但是,它實際上對我的作品的唯一途徑,與支架,但有沒有例子,人們括號。

+1

供參考:這些括號稱爲_paranthesis_'()':) – davidkonrad

回答

9

google.setOnLoadCallback(drawChart())(帶有pativehesis)不應該工作,所以這聽起來有點奇怪。 setOnLoadCallback預計名稱它可以調用的函數,而不是執行的函數。

setOnLoadCallback是Google的一般功能。它也是由google.load("jquery", "1.9.1")等觸發的。可能是這樣的情況,在您的代碼中的某個地方,另一個庫由google.load()加載,並由此觸發您的setOnLoadCallBack提前。

所以是絕對肯定的是,當可視化庫被加載回調實際上是觸發,而不是別的東西,你可以直接在load()設置,而不是依靠setOnLoadCallback()回調:

google.load('visualization', '1.0', 
    { packages: ['corechart', 'bar', 'table'], callback: drawChart }); 
+1

一些快速測試,這似乎工作得更好。我檢查了是否我在任何地方加載了任何其他Google庫,而我曾經這樣做,但刪除它似乎沒有任何效果。我仍然不確定爲什麼它不會在'google.setOnLoadCallback(drawChart)'中調用我的函數;''呼叫。 在任何情況下,你的建議是一個更好的方法來做到這一點。謝謝 – Justin

相關問題