2015-07-13 71 views
2

我試圖通過AJAX,但在Firebug我得到添加谷歌圖表:加載JavaScript後ajaxComplete

ReferenceError: google is not defined 

的AJAX,我發這個樣子的:

<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
<script type="text/javascript"> 
    google.load("visualization", "1", {packages:["corechart"]}); 
    google.setOnLoadCallback(drawVisualization); 

    etc etc... 

</script> 

我假設第一個腳本沒有加載。我將如何解決這個問題? 我試過在ajaxComplete後加載,但是我無法讓它工作。

+1

當你將你的谷歌功能封裝到DOM就緒函數中時會發生什麼? –

+0

但我通過AJAX將這兩個腳本發送到頁面(頁面加載後)。這不是說DOM已經準備好了嗎? – user537137

+0

@ user537137因此,如果您在解析文檔後加載此腳本,則會異步加載此腳本。因此,在腳本的onload處理程序中設置邏輯,包括谷歌jsapi。現在我想知道,你如何在頁面上包含這些腳本?並要注意,如果谷歌jsapi使用任何窗口onload事件被初始化,你不能使用這種方式來加載護目鏡腳本 –

回答

1

如果你想等到你的圖書館加載,你可以定期檢查它是否加載,當你檢測到它時,你可以執行你的代碼。我在這answer basign我的解決方案。

添加一個Javascript功能來檢查:

function whenAvailable(name, callback) { 
    var interval = 10; // ms 
    window.setTimeout(function() { 
     if (window[name]) { 
      callback(window[name]); 
     } else { 
      window.setTimeout(arguments.callee, interval); 
     } 
    }, interval); 
} 

,然後添加一個檢查,如果你有你的谷歌加載代碼並運行裏面的代碼,一旦加載

whenAvailable("google", function(t) { 
    google.load("visualization", "1", {packages:["corechart"]}); 
    google.setOnLoadCallback(drawVisualization); 

    etc etc... 
}); 

你可以自定義您的間隔。這是一個有用的模式要知道。