我有一个模板,使用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).
我有同样的问题。
解决方案是。
为每个ajax请求重新初始化聊天可视化对象映射数据;
即//在调用ajax之前
mapdata = null;
mapdata = new google.visualization.DataTable();
// ajax codeenter code here
我知道我的答案可能与您的代码格式无关,但它可能对其他人有帮助,因为它是针对同一问题的。如果您对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);
}
如果不删除它们,则假定您需要这些数据,并且默认情况下表格采用意外大小。因此,您将在控制台中遇到错误。我希望这可能对某些人有所帮助。干杯
我只是在调用渲染函数之前规范化了我的数据框;它对我来说很好。
规范化数据框:
data <- as.data.frame.matrix(data)