2012-03-06 6 views
0

私はこのanswerに記載されている方法に従って、ajaxリクエストのキューを作成します。しかし、私のキューが(ユーザーのアクションに依存します)オンラインで作成、私は以下のような機能を持っているされていますどのようにajax要求キューの開始をトリガーするのですか?

sendMessage = function(fieldName, oldValue, newValue) { 
    $(document).queue("ajaxRequests", function() { 
    // ... 
    $.ajax({ 
     // ... 
     success: function(data) { 
     $(document).dequeue("ajaxRequests"); 
     } 
    }); 
    }); 
    $(document).dequeue("ajaxRequests"); 
}; 

だから、私はこのsendMessage機能を複数回呼ぶことにします。この関数の最後に$(document).dequeue("ajaxRequests");があるので、正しく動作しないように見えます.AJAXは何度か起動されます。

これで、最初に正しく機能をトリガーする方法はありますか?おそらく私はキューの長さを確認する必要がありますか?または、fully manual queueを使用する必要がありますか?

+0

を再生するには、私は、迅速な同時要求のためのqueのモデルを放棄しました。タイムスタンプと一意のクライアントIDを選択すると、サーバーは実際の更新を並べ替えることができます。 – shaun5

答えて

1

私はあなたがキューとパイプの意志であなたの要求として働く解決繰延オブジェクトを作成http://api.jquery.com/category/deferred-object/

繰延オブジェクトを使用します。例えば

var mid=0; var queue=$.Deferred(); queue.resolve(); 

function sendMessage(msgId) { 
     return $.ajax({ 
      type: "GET", 
      url: "/echo/json/", 
      data: {delay: 1}, 
      dataType: "JSON", 
      success: function(){ 
       console.log("Success for " + msgId+ ""); 
      } 
     }); 
} 

function queueMessage() { 
    var m=++mid; 
    console.log("Queueing "+m) 

    queue=queue.pipe(function() { 
     return sendMessage(m); 
    }); 
} 

queueMessage(); 
queueMessage(); 

Aフィドルはそれでhttp://jsfiddle.net/j6CKj/

+0

ありがとう、nikoshr。それは私の質問に答えることはできませんが、これは良い解決策ですので、私はそれを受け入れています;) –

関連する問題