在重新开始之前等待功能完成

时间:2010-12-22 22:35:38

标签: javascript jquery ajax settimeout

早上好,

每次用户按下按钮时,我都会尝试调用相同的功能。这是目前发生的事情..

用户点击按钮 - >通话功能 - >函数需要1000ms +才能完成(由于使用jQuery和AJAX调用动画)

我想要发生的是每次用户按下按钮时,它会将功能添加到队列中,等待上一次调用完成,然后启动..

这可能吗?

很抱歉,如果我的解释有点令人困惑......

谢谢Matthew

5 个答案:

答案 0 :(得分:6)

由于函数是对象,因此它们可以存储属性。每次调用(按下按钮),然后在函数执行结束时,你可以让你的函数在自身上增加一个'queue'属性,检查它自己的队列属性是否为>如果是,则将queue属性减1并使用setTimeout再次调用自身。

答案 1 :(得分:0)

我最近不得不在自己的应用程序中这样做。我给你的最好的建议是(假设你已经在JavaScript函数中进行了AJAX调用)将一个回调函数参数传递给你的JavaScript函数。然后,在AJAX调用的success部分中,调用您的回调函数。

示例:

// In HTML <script> tags.
$(document).ready(function () {
    $("button#queue").click(function() {
        GetMembers(GetGroups(), MemberCallback));
    });
});

function GetMembers(userId, callback) {
    $.ajax({
        //Initialized AJAX properties
        url: "/My/Project/Ajax/Page.extension",
        data: "{ 'groupId':'" + groupId + "'}",
        success: function (result) {
            callback(result.d);
        }
    });
}

function MemberCallback(members) {
    // Do your thing here.
}

答案 2 :(得分:0)

你可以为制作动画的人添加一个回调函数,一旦动画完成它所调用的回调,你就可以做你想做的事。

以下是jquery docs的一个例子:

$('#clickme').click(function() {
  $('#book').animate({
    opacity: 0.25,
    left: '+=50',
    height: 'toggle'
  }, 5000, function() {
    // Put your code here, so it will be executed once the animation completes
  });
});
P.S。:早上好吗?差不多是午夜了; D

答案 3 :(得分:0)

您可以跟踪每次用户按下按钮时添加到队列的全局队列/数组,然后您需要在函数中进行回调(例如在jQuery的success回调中)它负责检查队列并调用队列中的下一个函数。

答案 4 :(得分:-1)

单击按钮时禁用该按钮。在ajax例程完成时启用它。