如何避免在前一个请求在for循环中完成之前通过ajax请求数据

时间:2014-04-11 01:52:52

标签: javascript ajax loops delay

我想通过使用ajax发送多个请求并返回for循环中的数据(逐个,一个完成,一个启动......)。

但是,有时它似乎会在不等待前一个数据完成的情况下发送新数据。结果,返回的数据不正确。虽然不经常发生,但任何人都可以帮我解决问题吗?

for (var i=0; i<myarray.length;i++){
        ajaxfunction(myarray[i]);
    }

我的假设是:

循环中的setTimeout,但结果似乎不对

我必须使用RAW javascript,而不是JQuery或其他库。我找到了一个有趣的东西叫做#34;完成:&#34;和&#34; .done()&#34;在JQuery中,我不确定这是否是我想要的。可以有人告诉我如何使用原始javascript解决问题吗?

2 个答案:

答案 0 :(得分:1)

我通常使用递归来解决这个问题,但不知道它是否有坏的方面。代码如下:

function doRequest(index, collection){
    $.ajax({
        url: collection[index],
        ....
        complete: function(){
            //do something
            if (index + 1 < collection.length) doRequest(index + 1, collection);
        }
    });
}

doRequest(0, myArray);

答案 1 :(得分:0)

递归调用魔术解决了完成一个ajax调用的问题并等待另一个请求直到第一个请求完成。

var queue_element = ["a","b","c","d","e","f","g"];

var execute_queue = function(i){    
 $.ajax( {    
    url: queue_element[i],
    success: function(
    {
        i++;    // going to next queue entry

        // check if it exists
        if (queue_element[i] != undefined)
        {
            execute_queue(i);
        }
    }

  }); // end of $.ajax( {...

}; // end of execute_queue() {...

var index = 0;

execute_queue(index); // go!