2012-03-06 68 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

我已經放棄了快速的併發請求的闕樣板戲。選擇一個時間戳和唯一的客戶端ID,允許服務器對實際更新進行分類。 – shaun5 2012-03-06 18:14:45

回答

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(); 

小提琴與它http://jsfiddle.net/j6CKj/

+0

謝謝,nikoshr。它不回答我的問題,但這是一個很好的解決方案,所以我接受它;) – 2012-03-13 19:25:58