我按照此answer中给出的方法创建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 :(得分: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/