2012-03-01 43 views
0

我有JQuery的以下內容:多的getJSON請求裏面陣列

$(document).ready(function() { 
    var names = ['item1', 'item2']; 
    var series1 = [{ name: '', data: []}]; 
    var series2 = [{ name: '', data: []}]; 
    var seriesCounter = 0; 
    .... 
    renderCharts(url, otherUrl); 

    function renderCharts(url, otherUrl) { 
     if (otherUrl != '') { 
      $.each(names, function (i, name) { 

       $.getJSON('somurl', function (items) { 
        series1[i].name = name; 

        $.each(items.somedata, function (j, item) { 
         series1[i].data.push({ 
          x: Date.parse(item.key), 
          y: item.value 
         }) 
        }); 

        seriesCounter++; 

        if (seriesCounter == names.length) { 
         ... render chart once all data has been downloaded 
        } 
       }); 
      }); 
     } 

     $.getJSON(url, function (items) { 
      $.each(items.otherData, function (i, item) { 
       series2[0].data.push({ 
        x: Date.parse(item.Key), 
        y: item.Value 
       }) 
      }); 

      // render other chart 
     }); 
    } 
} 

我不能得到這個工作。我每次運行這個我從來沒有進入以下條件:

if (seriesCounter == names.length) { 
    ... render chart once all data has been downloaded 
} 

如果我只有名稱數組中的一個項目,它工作得很好。當我添加兩個時,條件永遠不會變成真,因此我的圖表從不呈現。

我錯過了什麼?

+0

您是否在瀏覽器中使用firebug或google chrome等控制檯測試過它,以查看ajax(json)請求是否爲成功完成? – 2012-03-01 22:02:35

+0

是的,所有請求都成功完成。 – Thomas 2012-03-01 22:20:33

回答

2

series1變量被定義爲與它恰好一個要素(對象)的陣列,但$.each(names, function (i, name) {循環內你是治療它,就好像它有更多的元件和試圖訪問series1[i]用於i值是更大的當i是1時,您正在嘗試執行series1[1].name,但series1[1]未定義,並且沒有name屬性。

您的腳本將在該點停止,因此未到達行if (seriesCounter == names.length) {

我建議你宣佈series1一個空數組,然後在循環中根據需要添加一個新項目:

... 
var series1 = []; 
... 
$.each(names, function (i, name) { 
    $.getJSON('somurl', function (items) { 
     // create new object 
     series1[i] = { name: name, data: []}; 
     ... 

(你不必與series2同樣的問題,因爲雖然你已經聲明它作爲數組過你永遠只能訪問數組元素0)

0

的錯誤是在這裏:

var series1 = [{ name: '', data: []}]; 
var series2 = [{ name: '', data: []}]; 
... 
series1[i].name = name; 

系列1是從來沒有給出一個另外所以在第二次迭代時,它嘗試訪問未定義的數組值,在series[1]