Google arrayToDataTable-行0的行类型无效

Google arrayToDataTable - Invalid row type for row 0

本文关键字:类型 无效 arrayToDataTable- Google      更新时间:2023-09-26

我被卡住了(又一次!),似乎找不到这样的例子。我尝试过多种提取和格式化数据的方法,但都没有成功。

我有以下数据,通过服务器脚本以JSON格式提供:

[{ 
   "franchisee_name":"John Smith",
   "dish_menu":"Breakfast",
   "dish_title":"Bagels",
   "hq_price":"9.00",
   "store_price":"18.00",
   "valid_from_date":"2014-04-13",
   "valid_to_date":"9999-12-31"
 },
 {
   "franchisee_name":"Sam Jones",
   "dish_menu":"Breakfast",
   "dish_title":"Muesli",
   "hq_price":"8.00",
   "store_price":"13.00",
   "valid_from_date":"2014-04-13",
   "valid_to_date":"9999-12-31"
  },  ......

我想使用将其放入谷歌可视化表中

var data = google.visualization.arrayToDataTable(jsonData);

我知道数据需要如下所示:

['Franchisee', 'Menu Type','Dish', 'HQ Price', 'Store Price', 'Valid From', 'Valid To'], <-- header row         
['John Smith',  'Breakfast', 'Bagels', '9.00', '18.00', '2014-04-13', '9999-12-31'], <-- data row
....

我的代码是:

jQuery.getJSON( url, function( data ) {
   var header = ['Franchisee', 'Menu Type','Dish', 'HQ Price', 'Store Price', 'Valid From', 'Valid To'];            
   var row = "";            
   var rows = new Array();
   jQuery.each( data, function( i, d ) {
    row = [ d.franchisee_name, d.dish_menu, d.dish_title, int(d.hq_price), int(d.store_price), d.valid_from_date.toString(), d.valid_to_date.toString() ];
    rows.append(row);
   });  
   var jsonData = [header].concat(rows);
   var data = google.visualization.arrayToDataTable(jsonData);
   // Set chart options
   var options = {
    showRowNumber: 'false'
   };
   // Instantiate and draw our chart, passing in some options.
   var chart = new google.visualization.Table(document.getElementById('hq_report_div'));
   chart.draw(data, options);   
});

但我得到了错误Invalid row type for row 0,还没有找到如何解决这个问题的示例。谢谢你的帮助!

通过在回调函数中声明var data,您将成为javascript提升机制及其伴随的作用域微妙之处的牺牲品1。基本上,您的声明会转到函数的顶部,并屏蔽您的命名参数:data不等于[...],而是等于undefined,请参见Fiddlehttp://jsfiddle.net/dVaC2/来说明我的观点。

例如,将变量重命名为gdata(并使用parseInt()代替int()和[].push代替[].append):

var gdata = google.visualization.arrayToDataTable(jsonData);
// ...
chart.draw(gdata, options);  

还有一个演示http://jsfiddle.net/dVaC2/1/


1请参阅http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html或Javascript函数范围界定和提升,例如

相关文章: