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

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 に答える