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

您需要等到所有 AJAX 调用/data/tag.json完成。你可以用它 $.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 回答