jQuery同步非阻塞ajax调用

时间:2012-07-24 21:19:27

标签: jquery ajax asynchronous nonblocking

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

我一直在jQuery中使用async: false配置来执行此操作。然而,这会导致GUI变得非常迟缓,同时阻止完成调用。使用async: true GUI会响应,但请求并不总是按顺序处理。

是否有其他非阻塞方法来排队ajax请求,因此下一个请求只在前一个请求完成后发送?

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

1 个答案:

答案 0 :(得分: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/