Javascript “错误”;给出的行大小不同于2“;当使用谷歌可视化

Javascript “错误”;给出的行大小不同于2“;当使用谷歌可视化,javascript,jquery,google-visualization,Javascript,Jquery,Google Visualization,我有一个使用jQuery/AJAX提取数据的模板。获取数据不是一个问题,但我似乎不能以谷歌希望的方式使用它。我遇到问题的行是mapdata.addRows([gapidata])。阵列似乎有问题,但我不确定如何修复。非常感谢您的帮助 我正在使用的jQuery/AJAX: var gapidata = new Array(); $.ajax({ url: "inc/index.gapi.inc.php", cache: fal

我有一个使用jQuery/AJAX提取数据的模板。获取数据不是一个问题,但我似乎不能以谷歌希望的方式使用它。我遇到问题的行是
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).
我也有同样的问题

解决办法是

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

i、 e。 //在调用ajax之前

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

//ajaxcode
在此处输入代码

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

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);
}
var dataTable=new google.visualization.dataTable();
addColumn('string','category');
addColumn('string','context');
addColumn('string','id');
addColumn('number','location_subtype');
addColumn('string','location_type');
addColumn('string','month');
addColumn('string','persistent_id');
var json=json.parse(jsonData);

对于(var i=0;i我只是在调用渲染函数之前规范化了我的数据帧;它对我来说工作得很好

标准化数据帧:

data <- as.data.frame.matrix(data)

data如果您使用的是
data.addRows()
,是否确实要在带有
data.addColumn('type','label')
的行之前添加标题?您应该至少有两列国家和数据……这就是它们所做的(我认为!)mapdata.addColumn('string','country');mapdata.addColumn('number','IPs Listed');啊,非常正确。因此,您的数据似乎由于某种原因没有正确格式化。您是否绝对确定该对象仅采用您所说的格式(
['Korea,Republic of',50],'Japan',38]
)?我截短了帖子中的数据,因为这里有太多的条目要发布,但这只是我运行生成它的脚本时得到的输出的一个片段。AJAX调用也在工作,因为我能够在页面上显示这些数据。为了避免愤怒,我将其粘贴在这里:感谢您关注这一点。