Javascript中,for循环有异步请求,每次都只获取到最后一个数据解决办法

通过异步获取数据,往echart图显示,但是每次异步,每次获取数据都不一样,只获取最后一个的数据

for(i=0;i<=4;i++){
var myChart = echarts.init(document.getElementById('echarts' + i));
		myChart.setOption({
			//省略内容设置
			...
		});
		// 异步获取数据
		$.get("httpPieStatistics" + i).done(
				function(data) {
					i++;
					//省略内容设置
					...
					});
				});
	)

采用闭包原理,也没办法解决

for(var i=0;i<lis.length;i++){
        (function(arg){
    		 lis[arg].οnclick=function(){
}(i);

之后采用递归

function func(times){
    if(times <= 0){
        return;
    }
    $.get(url,data,function(){
        times --;
        func(times); //递归调用
    });
}
func(5);

采用递归后,完美的解决了问题

$(function() {
		func(0);
	});	
	/* 获取数据画图 */
	function func(i){
		if(i>4){
			return;
		}
		var myChart = echarts.init(document.getElementById('echarts' + i));
		myChart.setOption({
			//省略内容设置
			...
		});
		// 异步获取数据
		$.get("httpPieStatistics" + i).done(
				function(data) {
					i++;
					//省略内容设置
					....					
					func(i);// 递归调用
				});
	}

你可能感兴趣的:(问题专栏)