3

我有一个使用 jQuery/AJAX 提取一些数据的模板。获取数据不是问题,但我似乎无法以 GoogleVis 想要的方式使用它。对我造成问题的线路是mapdata.addRows([gapidata]);. 阵列似乎有问题,但我不确定如何解决。任何帮助是极大的赞赏!

我正在使用的 jQuery/AJAX:

        var gapidata = new Array();
        $.ajax({
          url: "inc/index.gapi.inc.php",
          cache: false,
        dataType: "text",
          success: function(html){
            gapidata = html;
          }
        });

我从 AJAX 调用中获得的数据:

    ['Korea, Republic of', 50],['Japan', 38]

我用来显示数据的代码:

        // Geo Map Chart
        var mapWidth = Math.round(((screenWidth / 12) * 10) * 0.8);
        var mapHeight = Math.round(mapWidth * 0.5);

        $('#dashboard-visit-map').width(mapWidth*1.1);
        $('#dashboard-visit-map').height(mapHeight*1.1);
        var mapdata = new google.visualization.DataTable();
        mapdata.addColumn('string','Country');
        mapdata.addColumn('number','IPs Listed');
        mapdata.addRows([gapidata]);

        var geochart = new google.visualization.GeoChart(document.getElementById('dashboard-visit-map'));
        geochart.draw(mapdata, {width: mapWidth, height: mapHeight,backgroundColor: { fill:'transparent' }});

目前该地图没有填充任何数据。如果我删除括号,gapidata我会在我的 JavaScript 控制台上收到以下错误:

    Uncaught Error: Row given with size different than 2 (the number of columns in the table).
4

3 回答 3

1

我只是在调用渲染函数之前标准化了我的数据框;它对我来说很好。

规范化数据框:

data <- as.data.frame.matrix(data)
于 2014-07-29T09:20:48.560 回答
0

我知道我的回答可能与您的代码格式无关,但它可能会帮助其他人,因为它是针对同一问题的。如果您对 json 数据进行 AJAX 调用,然后循环遍历它们,那么您必须确保在 addCollumn() 方法中包含 JSON 数据的所有列。如果您不想包含所有数据,则应delete在 for 循环中使用该命令,如下所示:

var dataTable = new google.visualization.DataTable();
dataTable.addColumn('string','category');
dataTable.addColumn('string','context');
dataTable.addColumn('string','id');
dataTable.addColumn('number','location_subtype');
dataTable.addColumn('string','location_type');
dataTable.addColumn('string','month');
dataTable.addColumn('string','persistent_id');
var json=JSON.parse(jsonData);
for (var i=0;i<json.length;i++) {
  //Deleted rows
  delete json[i].location;
  delete json[i].outcome_status;
  var row = [];        
  for (var item in json[i]) {
    row.push(json[i][item]);
  }        
  dataTable.addRow(row);
}

如果您不删除它们,则假定您需要这些数据,并且默认情况下该表采用了意外的大小。因此,您将在控制台中遇到错误。我希望这可能对某些人有所帮助。干杯

于 2014-01-27T11:05:13.297 回答
0

我有同样的问题。

解决办法是。

为每个 ajax 请求重新初始化您的聊天可视化对象 mapdata;

ie // 在调用ajax之前

    mapdata = null;
    mapdata = new google.visualization.DataTable();

// ajax代码enter code here

于 2013-05-30T10:34:08.380 回答