2013-07-24 94 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

相关问题