javascript中是否有一个事件可以绑定某种类型的侦听器,告诉我什么时候在页面上执行所有javascript / jQuery / Ajax?在执行开始的时间和我需要监听器“监听”的时间之间,页面将不会加载/卸载/重新加载等,因此这些事件不起作用。该页面实际上没有做任何事情。单击该按钮并激活一些包含对Web服务的Ajax调用的javascript函数。毕竟,我想改变window.location。但是在我的情况下,在web服务完成之前,window.location正在发生变化。
目前使用setTimeout来实现这一点,但是有时代码需要比正常情况更多的时间来运行,有时window.location在所有其他javascript完成之前触发。简单地说
<input type = "button"... onclick="doThis();";
function doThis() {
try{
//Contains AJAX calls to web services which is mainly what screws up my timing since it may still be trying to execute stuff when the redirect statement happens
}
catch (e) {
}
//Currently doing setTimeout(redirect, 10000);
//Would like to simply detect when all of the above is done and then redirect.
}
编辑:遗漏了一条至关重要的信息。 AJAX调用处于for循环中。对我来说变量和成功回调的使用并不是很好,因为在我的成功回调执行时,我的变量在for循环中采用了新值。
答案 0 :(得分:5)
您要实现的是经典的并发编程问题。它通过使用barrier来解决。
简单来说,你需要:
redirect
)。实际的实施留给读者一个练习:)
提示:将AJAX调用嵌入到处理所有计数器增量和回调设置的函数中。
答案 1 :(得分:3)
我的所作所为:
答案 2 :(得分:2)
假设您使用jQuery.ajax
,听起来好像在寻找ajaxStop。
答案 3 :(得分:1)
为什么不尝试在回调中使用类似Underscore library的after
函数的内容?
var done = _.after(3, function() {
window.location = 'http://example.com';
});
$.ajax({
url: '/tic',
success: function() {
done();
}
});
$.ajax({
url: '/tac',
success: function() {
done();
}
});
$.ajax({
url: '/toe',
success: function( data ) {
done();
}
});
答案 4 :(得分:0)
您应该检查来自AJAX调用的响应,并且仅在该响应中进行重定向。这样,当AJAX仍在执行时,您将避免重定向。