2016-10-17 7 views
1

私はユーザーが生成するJSONデータからHighChartsから棒グラフを作成しています。 JSONは次のようにフォーマットされます。ユーザーは、プロジェクトを選択しJSONの複数のシリーズによるハイチャート動的に

[{"name":"project1","data":[50291,7410,2013,2013,524,201]},{"name":"project2","data":[1776995,758630,25633,4120054,24521,2045]}] 

ので、このJSONデータも5つのプロジェクトのかもしれません!私は自分のハイチャートに直列に動的にロードできる必要があります。これは私が今持っているコードです。

$(function() { 

    var options = { 
     chart: { 
      renderTo: 'container', 
      type: 'column', 
      options3d: { 
       enabled: true, 
       alpha: 0, 
       beta: 0, 
       depth: 0, 
       viewDistance: 25 
      } 
     }, 
     title: { 
      text: 'Data' 
     }, 
     subtitle: { 
      text: 'Dataset' 
     }, 
     plotOptions: { 
      column: { 
       depth: 0 
      } 
     }, 
     series: [], 
     xAxis: { 
      categories: ['XA', 'XB', 'XC', 'XD', 'XE', 'XF'] 
     }, 

     credits: { 
      enabled: false 
     } 
    }; 
    $.getJSON('/uploads/test.json', function (list) { 
     var newseries = { 
      name: '', 
      data: [] 
     }; 

     $.each(list, function (i, item) { 
      newseries.name = item.name; 
      newseries.data = item.data; 
      options.series.push(newseries); 
     }); 
     var chart = new Highcharts.Chart(options); 


     function showValues() { 
      $('#alpha-value').html(chart.options.chart.options3d.alpha); 
      $('#beta-value').html(chart.options.chart.options3d.beta); 
      $('#depth-value').html(chart.options.chart.options3d.depth); 
     } 

     // Activate the sliders 
     $('#sliders input').on('input change', function() { 
      chart.options.chart.options3d[this.id] = this.value; 
      showValues(); 
      chart.redraw(false); 
     }); 

     showValues(); 
    }); 
}); 

私は唯一の私のチャートで一つのプロジェクトを持っているとき、これは動作しますが、より多くがある場合、チャート自体がいくつかの方法が上書きされ、唯一のJSONの最後のプロジェクトを示しています。誰かがこの問題で私を助けてくれますか?

+0

この行の前にconsole.log(options.series)を呼び出してください:var chart = new Highcharts.Chart(options)あなたが受け取ったものを教えてください。 –

+0

グラフの初期化の前にコードを追加しました。ブラウザにメッセージは表示されませんでしたが、chromeのinspect機能を有効にしたときに、3つのプロジェクトを選択したときに「[Object、Object、Object]」というメッセージが表示されました。 –

+0

私は試みました:window.alert(console.log(options.series));これは未定義です!チャートでは、最後のjson配列の値が表示されていますが、 –

答えて

2

私はこのターンになります。本当に、あなたのケースでは、あなたがすべてでループする必要はありませんが、あなたのリターンJSONので、

$.getJSON('/uploads/test.json', function (list) { 
    var newseries; 

    $.each(list, function (i, item) { 
     newseries = {}; 
     newseries.name = item.name; 
     newseries.data = item.data; 
     options.series.push(newseries); 
    }); 
    var chart = new Highcharts.Chart(options); 

を:もっとこのようなものに

$.getJSON('/uploads/test.json', function (list) { 
    var newseries = { 
     name: '', 
     data: [] 
    }; 

    $.each(list, function (i, item) { 
     newseries.name = item.name; 
     newseries.data = item.data; 
     options.series.push(newseries); 
    }); 
    var chart = new Highcharts.Chart(options); 

をハイチャートのための適切なフォーマットになっています。

あなたは(未テスト、微調整が必​​要になる場合があります)の代わりに

$.getJSON('/uploads/test.json', function (list) { 
    options.series = list; 
    var chart = new Highcharts.Chart(options); 

ような何かを試すことができます。

+0

ありがとう!最後の提案は機能します。非常にきれいなコード:-) –

2

これを試してください:あなたはその方法では、ループの外でそれらを宣言することによって、あなたのnewseriesオブジェクトのループをするたびにnamedataノードを上書きする

$.each(list, function (i, item) { 
    if(item.name!=undefined){ 
     options.series.push({ 
      name:item.name, 
      data:item.data 
     }); 
    } 
}); 
+0

が機能します。 : - D。 1つは、選択されたプロジェクトだけでなく、データのない「シリーズ1」もロードされますか?この「シリーズ1」はJSONに定義されていません。 –

+0

Jibriggsの答えが私を助けました!ご協力いただきありがとうございます! –

+0

あなたは大歓迎です! –

関連する問題