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