2012-07-24 81 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