2013-07-24 37 views
0

#1(ERS)的變量,如何檢索中的jquery AJAX .done()

我已經創建在其中從對象數組處理數據JavaScript函數,並且在這種功能,我通過迭代數組調用數組中每個對象的ajax請求。

但是,在ajax.done()函數中,我需要傳入迭代的索引j。然而,在迭代內部,j停留在4,而在迭代之外,j通過迭代成功計數。請注意,下面代碼中的i迭代循環遍歷每個ajax請求以抽出某些值以形成一個數組,因此可以忽略。

任何人都可以幫助我制定出我需要做什麼來使j迭代在.done()塊內?

感謝, 傑米

對象傳遞給代碼:

var dataConfig = [ 
      { targetDiv: "#chart", chartTitle: "Title", tooltipVisible: true, xAxisLabel: "Label", leftYAxisLabel: "Unit" }, 
      { apiUrl: "URL", type: "column", yAxis: "right", visibleInLegend: false }, 
      { apiUrl: "URL", type: "line", yAxis: "left", visibleInLegend: false }, 
      { apiUrl: "URL", type: "line", yAxis: "left", visibleInLegend: false }, 

     ]; 

驗證碼:

for (var j = 2; j < dataConfig.length; j++) { 
       console.log(j); 
       chartConfig[j] = { 
        yAxisValues: [], 
        type: dataConfig[j].type, 
        yAxis: dataConfig[j].yAxis, 
        visibleInLegend: dataConfig[j].visibleInLegend 
       } 
       $.ajax({ 
        url: baseURL + dataConfig[j].apiUrl, 
        beforeSend: function (xhr) { 
         xhr.setRequestHeader('Authorization', 'yes'); 
        } 
       }).done(function (data) { 
        //get Y Axis Values 
        var yAxisData = data.DataSeries.Data; 
        yAxisValues = []; 
        for (var i = 0; i < yAxisData.length; i++) { 
         var yAxisValue = yAxisData[i].Y[0]; 
         yAxisValues.push(parseInt(yAxisValue, 10)); 
        }; 
        console.log(yAxisValues); 
        console.log("j:", j); 
        // chartConfig[j].yAxisValues = yAxisValues; 
       }); 

      }; 

回答

2

AJAX是異步的。 .done()方法將運行在最可能與父循環不同步的點上,因此不能依賴變量'j'。

您可以通過捕獲j值在自執行的函數使用下面的語法來達到你想要什麼:

for (var j = 2; j < dataConfig.length; j++) { 
    (function(index) { 
     $.ajax({ 
      url: baseURL + dataConfig[j].apiUrl, 
      beforeSend: ... 
     }).done(function(data) { 
      console.log(index); 
     }); 
    })(j); 
} 
+0

完美的作品,謝謝! – Jamie

相關問題