Javascript 谷歌图表和jquerypost

Javascript 谷歌图表和jquerypost,javascript,php,jquery,google-visualization,Javascript,Php,Jquery,Google Visualization,我试图用jQueryPost方法返回的数据填充GoogleGeoChart,但它没有创建图表。我的代码如下所示: Object {MX: "164305", AR: "120045", CO: "56741", CL: "48449", VE: "26777"…} HTML: 你知道我错过了什么吗。图表永远不会呈现。您可能有时间问题。如果AJAX调用在google.load调用完成后返回,则google.setOnLoadCallback不执行任何操作。简单的解决方案是在加载可视化API后启动

我试图用jQueryPost方法返回的数据填充GoogleGeoChart,但它没有创建图表。我的代码如下所示:

Object {MX: "164305", AR: "120045", CO: "56741", CL: "48449", VE: "26777"…}
HTML:


你知道我错过了什么吗。图表永远不会呈现。

您可能有时间问题。如果AJAX调用在
google.load
调用完成后返回,则
google.setOnLoadCallback
不执行任何操作。简单的解决方案是在加载可视化API后启动AJAX调用:

google.load('visualization', '1', {'packages': ['geochart'], callback: drawRegionsMap});
function drawRegionsMap () {
    $.post('functions/functions.php', {f: 'getreferralstats'}, function(data) {
        if (data.success) {
            var chartData = google.visualization.arrayToDataTable([
                ['Country', 'Hits'],
                data.countries
            ]);

            var options = {};

            var chart = new google.visualization.GeoChart(document.getElementById('geomap'));
            chart.draw(chartData, options);
        }
    }, "json"); 
}
我怀疑您仍然会遇到问题,除非
数据。countries
是一个包含两个元素的数组(一个国家和一个值,如
['basicu',5]
)。如果
data.countries
是一个数组数组,则您希望改为使用此数组:

var chartData = google.visualization.arrayToDataTable([['Country', 'Hits']].concat(data.countries));

如果你检查chrome中的元素,你会在控制台中看到任何错误吗?@Dropzilla这是我经常检查的第一个地方。。没有错误。请查看文档,你的代码看起来不错。我唯一能想到的是,当代码试图访问DOM元素时,它不存在。所以这可能是一个时间问题。在回调中进行测试,查看dom元素是否存在。我认为控制台中会显示错误,但它可能是嵌套的。所以做
var测试=$(“#geomap”);警报(测试)如果对象确实存在,您应该在警报窗口中看到[object],否则您将看到未定义。如果google不在范围内,这也可能是回调问题。如果不是时间问题,试着将google加载到一个变量中,并以这种方式访问它。因此,在回调函数之外,比如
var googleScope=google
,然后访问回调函数内部的变量,因此
googleScope.setOnLoadCallback…
以及其他函数。。。这只是一个偶然的机会,因为谷歌应该是“全局”范围的一部分,并且应该可以通过你的回调来访问。嗯……这很有趣……我在我的回调中从来没有看到测试的错误或警报……这解决了我最初的问题,你是对的。我现在在添加我的数组时遇到了一个问题。使用您的建议,我看到:未捕获错误:第0行的行类型无效。。。有什么想法吗?我刚刚更新了数据的输出。国家数据…仍然符合图表数据的格式。国家数据包含什么?刚刚更新了我的输出…它是一个数组,每个国家代码作为键,计数作为值。它需要是一个数组,有两个值:国家代码和计数,不是键=>值关系,因为JSON将
数组('foo'=>'bar')
转换为对象
{“foo”:“bar”}
,而不是数组
[“foo”,“bar”]
google.load('visualization', '1', {'packages': ['geochart'], callback: drawRegionsMap});
function drawRegionsMap () {
    $.post('functions/functions.php', {f: 'getreferralstats'}, function(data) {
        if (data.success) {
            var chartData = google.visualization.arrayToDataTable([
                ['Country', 'Hits'],
                data.countries
            ]);

            var options = {};

            var chart = new google.visualization.GeoChart(document.getElementById('geomap'));
            chart.draw(chartData, options);
        }
    }, "json"); 
}
var chartData = google.visualization.arrayToDataTable([['Country', 'Hits']].concat(data.countries));