2012-07-24 84 views
5

在我的web应用程序中,我有一系列快速触发的ajax调用。在服务器上,这些需要按照从客户端发送的顺序进行处理。jQuery同步非阻塞AJAX调用

我一直在使用jQuery中的async: false配置来做到这一点。但是,这会导致GUI变得非常缓慢,同时阻止通话完成。使用async: true GUI是响应式的,但请求并不总是按顺序处理。

是否有排队Ajax请求的替代无阻塞方式,所以前一个已完成后才会下一个被发送?

注意:我没有要处理的“列表”的请求。这些请求是即时生成的,因此我需要能够在生成它们时将它们填充到某种类型的FIFO队列中,然后使用某个过程消耗队列。

+1

你可以调用每一个时,前一个结束。 – ocanal 2012-07-24 21:22:20

回答

6

可以用jQuery promises容易实现:

function firstAjax() { 
    return $.ajax({...}); 
} 

function secondAjax() { 
    return $.ajax({...}); 
} 

firstAjax().pipe(secondAjax).pipe(...).done(function() { 
    alert('all requests have successfully finished'); 
}); 

$.when(firstAjax()).pipe(secondAjax).pipe(...).done(function() { 
    alert('all requests have successfully finished'); 
}); 

http://jsfiddle.net/zerkms/WQcVD/1/

+0

我认为'done'可以有参数'.done(function(a1,a2){...})' – 2012-07-24 21:27:47

+1

@Sheikh Heera:是的,但我不明白如何为所有延迟做这件事(if if我们把它们连锁起来,不能同时运行)。如果只是我们手动'secondAjax'中的'arguments'' – zerkms 2012-07-24 21:30:08

+1

OK,问题是我没有“有”所有的电话,我打算在这个过程开始时...... – bradvido 2012-07-24 21:51:41