我遍历了几个条目,并为每个条目发出一个ajax请求(使用jQuery)。我希望它们独立执行,但按照它们被调用的顺序填充到DOM中,而不是按照它们返回的顺序(由于某些原因,某些请求比其他请求花费的时间更长)。对于这类事情的最佳实践有什么建议吗?
发布于 2010-12-14 15:41:23
这个问题的答案最终是一个名为ajaxManager的jQuery插件。这正是我所需要的:
发布于 2010-12-06 21:56:47
结果可以以任何未定义的顺序返回,它们是异步的,并且受到互联网和服务器的变幻莫测的影响。
您能做的就是用TCP在UDP上处理问题的相同方式来处理这个问题。您可以使用序列标识符。
保持序列标识符运行,并在每次发出请求时递增它。当请求返回时,按顺序检查它们,并且只在它们进来时处理它们。按顺序保存与数据一起返回的内容的列表,并在每次更新后使用例程触发来检查该列表。当第一个expected进入时,它应该将整个列表向下处理到第一个间隙。
请记住,您可能会丢失一个请求,因此,在忽略给定的序列标识符之前,适当的超时将是合适的。
发布于 2010-12-06 21:52:18
您可以将所有成功结果对象发送到一个队列。有一个与原始请求一起发送的索引,并不断检查该队列中是否有下一个索引。
但是通常浏览器只允许两个并发的ajax请求,因此在前一个请求成功时发送下一个ajax请求可能是值得的。
这里是代码的起点:
var results = {}, lastProcessedIndex = 0;
var totalLength = $('a.myselector').each(function(el, index){
$.ajax({
url: $(this).attr('href'),
success: function(result){
results[index] = result; // add to results object
}
});
}).length;
var intervalId = setInterval(function(){
if(results[lastProcessedIndex]){
// use object
lastProcessedIndex++;
}
else if(totalLength == lastProcessedIndex){
clearInterval(intervalId);
}
}, 1000); // every 1 second
https://stackoverflow.com/questions/4371277
复制相似问题