我有一个使用jQuery加载带有javascript函数的文件/内容的Div ..
function DoWork() {
// Do Stuff
}
让我们说用户可以重新加载Div并使用相同的js函数DoWork()拉出相同的文件/内容。问题是,当重新加载文件时,先前加载的函数DoWork()仍在运行。如何杀死先前解雇的DoWork()并重新启动它?
答案 0 :(得分:3)
Javascript是单线程的,这意味着在给定时刻只能执行一件事。如果DoWork
已经“正在运行”,那么要么a)阻止所有其他JS代码,你别无选择,只能让它完成,因为你无法执行任何中断代码,直到它自己完成,或者b )DoWork
计划在setTimeout()
或setInterval()
的某个时间间隔内启动。
如果是后一种情况,setTimeout()
和setInterval()
会返回一个ID。将该ID存储在某处,并根据您的启动方式致电clearTimeout(doWork_timeout_id)
或clearInterval(doWork_interval_id)
。
答案 1 :(得分:1)
您可以构建一个使用的简单函数:setTimeout然后每次调用DoWork将首先调用:clearTimeout。我真的不喜欢这个解决方案,因为你会在setTimeout上浪费CPU。 所以另一种选择是在DoWork中使用Web worker(如果你在另一个线程中运行大数据的话,它将为你做很多其他的好事) - 然后你可以选择发送'stop'消息你开始DoWork()工作的时候了。
答案 2 :(得分:0)
你使用ajax加载div的内容吗?如果是这样,更好的方法如下:
var doWorkAjax=null;
function DoWork(){
if (doWorkAjax) doWorkAjax.abort();
doWorkAjax = $.ajax(url, data, function(result){
....
doWorkAjax=null;
});
}