javascript - 异步加载 Google jsapi

标签 javascript jquery google-visualization

今天 Google 图表出现问题,因此如果我们无法加载 js 文件,我们将尝试优雅地失败。以下工作正常:

<script type="text/javascript" src="https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221.0%22%2C%22packages%22%3A%5B%22corechart%22%5D%7D%5D%7D"></script>

问题是它会在等待脚本超时时阻止运行其他代码。

下面的代码加载,

<script type="text/javascript">
$.ajax({
    url: 'https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221.0%22%2C%22packages%22%3A%5B%22corechart%22%5D%7D%5D%7D',
    dataType: 'script',
    cache: true, // otherwise will get fresh copy every page load
    success: function() {
      google.load("visualization", "1", {packages:["corechart"]}); 
    }
});
</script>

但是当我尝试使用诸如

之类的可视化时它会出错
var data = new google.visualization.DataTable();

我正在做的事情是否可行,或者我们是否遇到了这样的问题:如果 Google 出现问题,我们只能等待 js 文件超时并继续?

谢谢!

最佳答案

由于您在成功时调用了 google.load 函数,因此 ?autoload=... 内容是多余的。

只需将您的网址更改为 //www.google.com/jsapi,然后将 'callback' 添加到 load 调用中确保在 corechart 完成时调用您的 drawChart 代码。

这是一个 JSFiddle 和一个代码片段: http://jsfiddle.net/c56pC/2/

<script type="text/javascript">
$.ajax({
    url: '//www.google.com/jsapi',
    dataType: 'script',
    cache: true,
    success: function() {
        google.load('visualization', '1', {
            'packages': ['corechart'],
            'callback': drawChart
        });
    }
});
</script>

关于javascript - 异步加载 Google jsapi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19126279/

相关文章:

javascript - 如何查找 JSON 对象的长度

javascript - 在 DOM 中呈现表格后,AngularJS Linkify 单元格与表格中的链接

jQuery fadeOut 和 SlideUp,然后 fadeIn 和 SlideDown

javascript - 谷歌图表 API - 柱形图 - 垂直条上方的百分比以及 vaxis 左侧的正常值

javascript - Google 可视化数据表更改背景颜色

javascript - 获取其中包含连字符的字符串的最后一个子字符串值

javascript - 如何使滚动条的大小(长度)保持稳定?

javascript - 使用 jquery 或 javascript 从字符串中获取值

javascript - 如何为柱形图中的条形图添加不同的颜色

javascript - 箭头函数 ES6