gpt4 book ai didi

javascript - 检测 Javascript 何时执行完毕

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:05:43 25 4
gpt4 key购买 nike

在 javascript 中是否有一个事件,我可以绑定(bind)某种监听器,当所有 javascript/jQuery/Ajax 在页面上执行完毕时,它会告诉我?在执行开始和我需要监听器“监听”的时间之间,页面不会加载/卸载/重新加载等,因此这些事件不起作用。该页面实际上没有做任何事情。单击该按钮,一些 javascript 函数会触发,其中包含对 Web 服务的 Ajax 调用。全部完成后,我想更改window.location。但是在我的例子中,在网络服务完成之前 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 循环中采用了新值。

最佳答案

您要解决的是经典的并发编程问题。它通过使用 barrier 来解决。 .

简单来说,你需要:

  1. 数一数您打了多少电话。
  2. 为所有 AJAX 完成事件设置回调。
  3. 使该回调减少调用次数。
  4. 回调检查调用次数是否已达到零。如果是,则调用您的最终代码(此处为 redirect)。

实际的实现留给读者作为练习 :)

提示:将 AJAX 调用嵌入到处理所有计数器递增和回调设置的函数中。

关于javascript - 检测 Javascript 何时执行完毕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com