2012-04-24 4 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> 

今、私は、資源の有効利用となり、それぞれの人のための1つのAJAX要求をキューイングとは思いません。プラスそれは遅いでしょう。

「追加」ボタンをクリックした後に、私が考えているのは遅れか、それに沿ったものです。だから私はクリックした人のすべてのIDを記録し、クリックされたすべての人に対して1つのAjaxリクエストを送信します。

既存のスクリプトがありますか、これを行う方法をお勧めしますか?

+0

可能:AJAXがすでに実行されているかどうかを確認するためのグローバルな 'boolean'変数です。そうであれば 'setInterval()'を使って、AJAXが 'complete()'を実行した後に変数がリセットされるまでチェックを続けてください...テストされていませんが、理論的にはうまくいきます。 – faino

答えて

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

どのような伝説!本当にそれを感謝し、それは箱の外で動作します! –

+0

しかし、この解決策はAJAXの状態を考慮しません。もしAJAXがまだ前のリクエストをロードしていたら? – Raptor

+0

@ShivanRaptor - 同時に飛行中に複数のajaxリクエストを持つことができます。 OPはそれをただ1つのAjaxリクエストに限定するよう要求しませんでした。彼らは遅延を実装するように頼んだり、新しい人が追加されずに遅延が経過すると、最後の要求以来収集されたすべての新しい名前を持つajax要求を起動します。 – jfriend00

関連する問題