6

今天谷歌图表有一个问题,所以如果我们无法加载 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();

我正在做的事情是否可行,或者我们是否遇到了谷歌遇到问题的问题,我们只需要等待 js 文件超时并继续前进?

谢谢!

4

2 回答 2

5

由于您google.load在成功时调用该函数,因此?autoload=...这些东西是多余的。

只需将您的 url 更改为//www.google.com/jsapi,并在调用中添加一个'callback'load确保drawChart在完成时调用您的代码corechart

这是一个 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>
于 2013-10-02T21:49:57.097 回答
2

您的脚本一旦通过 AJAX 下载就不会执行。你想使用$.getScript()

$.ajaxSetup({ cache: true });
var 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';
$.getScript(url, function() {
    google.load("visualization", "1", {packages:["corechart"]}); 
});
于 2013-10-01T21:34:48.927 回答