Javascript 等待函数完成后再重新启动
早上好 我试图在用户每次按下按钮时调用相同的函数。下面是目前发生的情况 用户单击按钮->调用函数->函数需要1000毫秒以上的时间才能完成(由于jQuery和AJAX调用的动画) 我希望每次用户按下按钮时,它都会将函数添加到队列中,等待上一个调用完成,然后启动 这可能吗 对不起,如果我的解释有点混乱的话Javascript 等待函数完成后再重新启动,javascript,jquery,ajax,settimeout,Javascript,Jquery,Ajax,Settimeout,早上好 我试图在用户每次按下按钮时调用相同的函数。下面是目前发生的情况 用户单击按钮->调用函数->函数需要1000毫秒以上的时间才能完成(由于jQuery和AJAX调用的动画) 我希望每次用户按下按钮时,它都会将函数添加到队列中,等待上一个调用完成,然后启动 这可能吗 对不起,如果我的解释有点混乱的话 谢谢Matthew,我最近不得不在自己的应用程序中这样做。我给您的最好建议是(假设您已经在JavaScript函数中进行了AJAX调用)将回调函数参数传递到JavaScript函数中。然后,在A
谢谢Matthew,我最近不得不在自己的应用程序中这样做。我给您的最好建议是(假设您已经在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.
}
//在HTML标记中。
$(文档).ready(函数(){
$(“按钮队列”)。单击(函数(){
GetMembers(GetGroups(),MemberCallback));
});
});
函数GetMembers(userId,回调){
$.ajax({
//初始化的AJAX属性
url:“/My/Project/Ajax/Page.extension”,
数据:“{'groupId':'”+groupId+“}”,
成功:功能(结果){
回调(结果d);
}
});
}
函数MemberCallback(成员){
//在这里做你的事。
}
您可以在制作动画的函数中添加一个回调函数,一旦动画完成回调,就会调用回调函数,这样您就可以随心所欲了
下面是jquery文档中的一个示例:
$('#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
});
});
附言:早上好?快午夜了;D您可以跟踪全局队列/数组,每次用户按下按钮时,您都会将其添加到队列中,然后您需要在函数中进行回调(例如在jQuery的
success
回调中)这将检查队列并调用队列上的下一个函数。因为函数是可以存储属性的对象。您可以让函数在每次调用它时(按下按钮)在其自身上增加一个“队列”属性,然后在函数执行结束时,检查其自身的队列属性是否>0,如果是,则将队列属性减一,然后使用setTimeout
在单击按钮时禁用该按钮。ajax例程完成后启用它。是否要将动画和ajax正确地排入队列?无需全局命名空间:只需向使用它的对象添加一个属性。:D这里也是午夜时分。顺便说一句,我想他事先不知道(当动画完成时)按钮是否再次按下。最好的方法是调用setTimeout。否则,这将导致堆栈溢出。;-)+1@draeton好点子!当/如果函数在结束时调用自身,则应在setTimeout中完成,延迟为零。@draeton:事实上,这还有一个好处,即浏览器的渲染引擎可以执行某些操作(并避免出现“脚本Y似乎忙了一段时间。是否杀死它?”)