Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在一个页面上多个谷歌图表-高效加载库?_Javascript_Charts_Google Visualization - Fatal编程技术网

Javascript 在一个页面上多个谷歌图表-高效加载库?

Javascript 在一个页面上多个谷歌图表-高效加载库?,javascript,charts,google-visualization,Javascript,Charts,Google Visualization,我看到很多人问关于在一个页面上有多个Google图表,答案总是“你的html/js是错误的”,或者“只是将所有这些添加到一个在setOnLoadCallback中调用的函数中” 我的问题有点不同。如果我想要按钮,客户端,当点击时,生成一个谷歌图表。我是否需要每次调用“google.load(..)”,然后再调用setOnLoadCallback,或者是否有某种方法可以加载它一次,然后从那时起只使用已经加载的对象 我能想到的唯一一件事是存储一些在第一次google.setOnLoadCallbac

我看到很多人问关于在一个页面上有多个Google图表,答案总是“你的html/js是错误的”,或者“只是将所有这些添加到一个在setOnLoadCallback中调用的函数中”

我的问题有点不同。如果我想要按钮,客户端,当点击时,生成一个谷歌图表。我是否需要每次调用“google.load(..)”,然后再调用setOnLoadCallback,或者是否有某种方法可以加载它一次,然后从那时起只使用已经加载的对象

我能想到的唯一一件事是存储一些在第一次google.setOnLoadCallback上更新的标志,如果设置了标志,就不要再加载它,但是如果有人快速单击几个按钮,他们都会发出“加载”函数调用

基本上,我想要一个我可以调用的通用函数(我自己创建),但我不想要每次调用google.load的函数,这感觉真的很低效


如何有效地执行此操作?

google.load
确实应该在每次页面加载时只调用一次。您不必将所有图表放在一个函数中,您可以创建多个函数并随时调用它们,如下所示:

google.load('visualization', '1.1', {
    packages: ['corechart', 'controls'],
    language: 'en'
});

function drawFirstVisualizations() {
    chart1 = new google.visualization.ChartWrapper({
        'chartType': 'LineChart',
    });

    chart2 = new google.visualization.ChartWrapper({
        'chartType': 'LineChart',
    });

    chart1.draw();
    chart2.draw();
}

function drawSecondVisualizations() {
    chart3 = new google.visualization.ChartWrapper({
        'chartType': 'LineChart',
    });

    chart4 = new google.visualization.ChartWrapper({
        'chartType': 'LineChart',
    });

    chart3.draw();
    chart4.draw();
}

google.setOnLoadCallback(drawFirstVisualizations);

function functionBeingCalledLater() {
    google.setOnLoadCallback(drawSecondVisualizations);
}

但是setOnLoadCallback不是每个“.load”调用只调用一次吗,即加载一次吗?不,您可以随时调用它。不要被
setOnLoadCallback
中的术语
OnLoad
打扰。最重要的术语是
回调
在计算机编程中,回调是一段可执行代码,作为参数传递给其他代码,这些代码将在方便的时候回调(执行)参数。调用可以像在同步回调中那样立即进行,也可以像在异步回调中那样在稍后的时间进行。
请阅读。啊,好的,这就是我缺少的部分。我以为它只调用回调一次,有点像说“onclick=myFunction()”,每次调用只会单击一次,我以为每次加载都会调用一次,但我会尝试一下,看看会发生什么。