google.setOnLoadCallback不起作用/不等到加载任何内容

Jus*_*tin 5 javascript asp.net google-chrome google-visualization

这就是它,这个电话似乎绝对没有.

如果我在Chrome中调试页面,请在调用后立即设置断点

google.load('visualization', '1.0', { packages: ['corechart', 'bar', 'table'] });
Run Code Online (Sandbox Code Playgroud)

并且字面上等待5-10秒以完成装载,然后继续,这很好.否则,如果我让'setOnLoadCallback'尝试做它的事情,它会抛出

'未捕获的TypeError:无法读取属性'DataTable'的未定义'

抛出错误:

var data = new google.visualization.DataTable();
Run Code Online (Sandbox Code Playgroud)

编辑:

我还应该注意到,在我打电话的所有例子中

google.setOnLoadCallback(drawChart);
Run Code Online (Sandbox Code Playgroud)

所有示例如上所述,不包括函数末尾的括号'()',即

google.setOnLoadCallback(drawChart());
Run Code Online (Sandbox Code Playgroud)

然而,它实际上对我有用的唯一方法是使用括号,但是没有人们包含括号的示例.

dav*_*rad 11

google.setOnLoadCallback(drawChart())(带着paranthesis)根本不应该工作,所以听起来有点奇怪.setOnLoadCallback期望它可以调用的函数的名称,而不是函数的执行.

setOnLoadCallback是一般的谷歌功能.它也是由google.load("jquery", "1.9.1")等等触发的.可能是你的代码中的某个地方被另一个库加载并由之google.load()触发你的setOnLoadCallBack过早.

因此,要确保在加载可视化库时实际触发回调,而不是通过其他内容触发,您可以直接设置回调load()而不是依赖setOnLoadCallback():

google.load('visualization', '1.0', 
     { packages: ['corechart', 'bar', 'table'], callback: drawChart });
Run Code Online (Sandbox Code Playgroud)