5

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

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

是否有另一种非阻塞方式来排队 ajax 请求,所以只有在前一个请求完成后才发送下一个请求?

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

4

1 回答 1

7

可以使用jQuery Promise轻松完成:

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/

于 2012-07-24T21:22:40.107 回答