我想通过使用ajax发送多个请求并返回for循环中的数据(逐个,一个完成,一个启动......)。
但是,有时它似乎会在不等待前一个数据完成的情况下发送新数据。结果,返回的数据不正确。虽然不经常发生,但任何人都可以帮我解决问题吗?
for (var i=0; i<myarray.length;i++){
ajaxfunction(myarray[i]);
}
我的假设是:
循环中的setTimeout,但结果似乎不对
我必须使用RAW javascript,而不是JQuery或其他库。我找到了一个有趣的东西叫做#34;完成:&#34;和&#34; .done()&#34;在JQuery中,我不确定这是否是我想要的。可以有人告诉我如何使用原始javascript解决问题吗?
答案 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!