2012-10-05 70 views
0

我正在使用Flot在頁面上顯示時間序列數據圖。該圖表適用於單個數據集,但是我想添加按標籤分組的多個數據集的功能。Javascript數組未正確填充

我將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 
     } 
    }); 
}); 
+1

$ .getJSON是一個ajax調用,它是異步的。 – jbabey

+0

您是否確實需要爲每個標籤分別進行AJAX調用? –

+0

如果有一種方法可以格式化JSON數據以允許我使用標記一次讀取它,然後從中解析它,則不一定需要爲每個標記進行AJAX調用。我在我的控制器中使用了與acts_as_taggable_on gem配合使用的rails,其標籤值爲JSON。 – amarcy

回答

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 
      } 
     }); 
    }); 
}); 
+0

這是有道理的,但它提供了一個錯誤,它在deferreds.push的參數列表後面缺少一個「)」($。getJSON調用,我似乎無法通過在函數後面添加「)」來解析呼叫。思考? – amarcy

+0

@amarcy固定。這裏有一個提示,如果你使用和Eclipse一樣的IDE或者Webstorm,它會告訴你問題出在哪裏 –

+0

謝謝,我只用了firebug。該修復程序允許加載頁面,但是我看到一個空白圖,就好像系列陣列中沒有任何數據。 當它執行.push(數據)時,通過螢火蟲的控制檯並對seriesArray執行警報,看起來在調用JSON頁面時,serialArray中包含的對象數量減少爲零。我期望它從零對象開始,並隨着數據被推入而增加。思考? – amarcy