2015-07-13 69 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... 
}); 

你可以自定义您的间隔。这是一个有用的模式要知道。