For循环不会等到ajax响应来了。

时间:2014-05-22 12:33:31

标签: javascript ajax

在for循环中进行ajax调用。 for循环不等待ajxa调用得到响应,它将值递增到加1,因此响应不会更新到它的相应div。

示例:我有'N'个没有div,其中id为divid0,divid1,divid2,divid3,divid4 ........ dividn。
在循环中(对于(var i = 0; i< n; i ++)),首先'i'值为零,我需要更新我对id为"divid0"的div的第一个ajax响应,但直到我得到循环'i'中的ajax响应递增为1,因此我的第一个ajax响应正在更新为div,其id为"divid1"而不是"divid0"

我使用ajax同步调用克服了这个问题,但问题是我无法将页面拖到底部,直到完全加载页面。我的网页包含大约10个滑块,因此完全加载需要超过一分钟,然后只有用户才能查看该页面。所以我希望用户即使在页面加载时也会拖到页面底部(加载最少一个滑块后)。

提前致谢,这是我的代码

for(var sliderId=0; sliderId < 6; sliderId++){ 
    $.get('api url', {}, function(response){
        if(!response){ 
            $("#slider"+sliderId).html('Currently there is no items in this category');
        } else{
            if((response.results) && (response.results.length > 0)){
                getInfo(response, sliderId);
            }        
        }                
    });     
}

2 个答案:

答案 0 :(得分:0)

你也可以使用这种递归方法获得结果

 var sliderId = 0;
function recursive1(sliderId)
{
  $.get('api url', {}, function(response){
    if(!response){ 
        $("#slider"+sliderId).html('Currently there is no items in this category');
    } else{
        if((response.results) && (response.results.length > 0)){
            getInfo(response, sliderId);

        }        
    }  
    if(sliderId < 6)
               recursive(sliderId++)              
});     
}
recursive1(0)

答案 1 :(得分:0)

问题是,&#39; sliderId&#39;在所有响应中指的是相同的变量。因为在for循环完成之前没有调用回调,所以&#39; sliderId&#39;将有价值&#39; 6&#39;对于所有响应呼叫。 你可以通过为每个ajax调用引入一个新的范围来解决这个问题(比如MMK sggested)。

E.g。由:

for(var sliderId=0; sliderId < 6; sliderId++) {
 updateDiv(sliderId);
}

function updateDiv(sid) {
  $.get('api url', {}, function(response){
    if(!response){ 
        $("#slider"+sid).html('Currently there is no items in this category');
    } else{
        if((response.results) && (response.results.length > 0)){
            getInfo(response, sid);
        }        
    }                
  }); 
}