0

Flotを使用して、ページに時系列データのグラフを表示しています。グラフは単一のデータセットで正常に機能しますが、タグでグループ化された複数のデータセットの機能を追加したいと思います。

正しく機能するために必要な形式のJSON出力があります。プロットする前に複数のデータセットを組み合わせると、問題が発生します。

データセットをseriesArray配列に入れたいのですが、以下のコードでは、グラフをプロットしているときにその配列にデータが入力されていません。

関数の最後にあるtagsList配列にデータがあるので、同じ方法で入力されるようにseriesArrayを設定しました。

私は何が欠けていますか?

var plotarea = $("#placeholder");
var data;   
var plot;
var tagsList=[];
var seriesArray = [];
$.getJSON("/items/getTags.json", function(tagsJSON) {
  $.each(tagsJSON, function(key, val) {
    tagsList.push(val.name);
    $.getJSON("/data/"+val.name+".json", function(json) {
      data = [{label:val.name, data:format(json)}];
      seriesArray.push(data);
    });  
  });
  plot = $.plot(plotarea , seriesArray, {series:{ lines: {show: true},points: {show:true}},
      xaxis: {
          mode: "time",
          timeformat: "%m/%d/%y",
          tickDecimals: 0,
          minTickSize: [2,"day"]
      },
      yaxis: {
          minTickSize: 1,
          tickDecimals: 0
      }
  });
});
4

1 に答える 1

1

/data/tag.jsonへのすべてのAJAX呼び出しが終了するまで待つ必要があります。あなたはそれをするために使うことができます $.when().then()

var plotarea = $("#placeholder");
var data;
var plot;
var tagsList=[];
var seriesArray = [];
$.getJSON("/items/getTags.json", function(tagsJSON) {
    var deferreds = [];
    $.each(tagsJSON, function(key, val) {
        tagsList.push(val.name);
        deferreds.push($.getJSON("/data/"+val.name+".json", function(json) {
            data = [{label:val.name, data:format(json)}];
            seriesArray.push(data);
        }));
    });
    $.when(deferreds).then(function(){
        plot = $.plot(plotarea , seriesArray, {series:{ lines: {show: true},points: {show:true}},
            xaxis: {
                mode: "time",
                timeformat: "%m/%d/%y",
                tickDecimals: 0,
                minTickSize: [2,"day"]
            },
            yaxis: {
                minTickSize: 1,
                tickDecimals: 0
            }
        });
    });
});
于 2012-10-05T18:11:24.137 に答える