2012-04-24 97 views
2

我一直在做大量的搜索,並不認爲我能找到我要找的東西。如何排隊jQuery ajax請求?

我有一個類似於twitter的工作方式,你需要在一個按鈕上單擊一個按鈕來添加(或在Twitter上關注)多個人。

因此,例如每次我點擊下面的「添加」按鈕,它都會發出一個AJAX請求,將它們添加到數據庫中。現在

<ul> 
    <li>Ben <a href="#" onclick="return addPerson(1);">Add</a></li> 
    <li>Sarah <a href="#" onclick="return addPerson(2);">Add</a></li> 
    <li>Chantelle <a href="#" onclick="return addPerson(3);">Add</a></li> 
    <li>Alan <a href="#" onclick="return addPerson(4);">Add</a></li> 
</ul> 

如果我點擊添加按鈕的每個人,一個接一個,我不認爲排隊每人一個Ajax請求將是一個很好的利用資源。另外它會很慢。

我在想什麼可能是延遲或沿着這些行後點擊每個「添加」按鈕。因此它記錄了我點擊的人的所有ID,併爲所有點擊的人發送了一個Ajax請求。

有沒有現有的腳本,或者你能推薦我如何做到這一點?

+0

可能的:一個全局'boolean'變量來檢查AJAX是否已經在運行;如果是這樣,使用'setInterval()'繼續檢查,直到AJAX運行'complete()'後重置變量...未測試,但它應該在理論上工作。 – faino 2012-04-24 02:59:47

回答

3

會這樣的伎倆嗎?

var sendDelay; 
var peopleToSend = []; 
addPerson = function(id) { 
    if (sendDelay!=null) { 
     clearTimeout(sendDelay); // Clear timeout 
    } 
    sendDelay=setTimeout(addPersonDelayComplete,2000); // Reset timeout 
    peopleToSend.push(id); // Add person to array 
} 

addPersonDelayComplete = function() { 
    // Send the people in peopleToSend in a single ajax call here 
    peopleToSend.length = 0; // Reset the array 
} 
+0

什麼傳奇!真的很感謝,它可以在盒子裏使用! – 2012-04-24 03:30:24

+0

但這個解決方案不考慮AJAX的狀態。如果AJAX仍在加載之前的請求,該怎麼辦? – Raptor 2012-04-24 03:32:14

+0

@ShivanRaptor - 您可以同時在飛行中擁有多個ajax請求。 OP沒有要求將其限制爲只有一個Ajax請求。他們要求實施延遲,當延遲通過而沒有添加任何新人時,然後使用自上次請求以來收集的所有新名稱,發出ajax請求。 – jfriend00 2012-04-24 03:40:00