Javascript 卸载通过load()加载的JS以避免重复?
我正在构建一个动态网站,通过jquery的load()加载“body”div中的所有页面。问题是我在加载的PHP页面中有一个使用setInterval循环的脚本,原因是我只希望在显示该页面时加载该脚本。现在我发现,即使在“离开”页面(在div中加载其他内容而不刷新)之后,脚本仍会继续运行,如果我继续离开/返回循环,则会用GET请求(来自javascript)淹没我的服务器 离开页面后卸载所有JS的好方法是什么?我可以做一个简单的虚拟变量,不加载脚本两次,但我想在离开页面后停止循环,因为它会导致无用的流量,并导致控制台错误,因为它应该填充的元素不再存在Javascript 卸载通过load()加载的JS以避免重复?,javascript,php,jquery,Javascript,Php,Jquery,我正在构建一个动态网站,通过jquery的load()加载“body”div中的所有页面。问题是我在加载的PHP页面中有一个使用setInterval循环的脚本,原因是我只希望在显示该页面时加载该脚本。现在我发现,即使在“离开”页面(在div中加载其他内容而不刷新)之后,脚本仍会继续运行,如果我继续离开/返回循环,则会用GET请求(来自javascript)淹没我的服务器 离开页面后卸载所有JS的好方法是什么?我可以做一个简单的虚拟变量,不加载脚本两次,但我想在离开页面后停止循环,因为它会导致无
很抱歉,如果已经有人问过这个问题,但是很难找到这个问题的关键词。听起来你真的需要重新评估你的设计。要么您需要删除ajax,要么您的方法名称中不需要冲突 您可以查看此链接: 它提供了有关如何从DOM中删除javascript的信息。但是,现代浏览器会将代码保留在浏览器的内存中。1)为什么不尝试使用
clearInterval
?
2) 如果您有一个通用(main)函数a(){…}
在做某事,您可以使用函数a(){}覆盖它代码>无所事事
3) 如果对某个对象的引用为null,则该对象将被垃圾收集
没有提供代码,因此我无法再为您提供帮助因为您没有处理真实的页面加载/卸载,所以我将构建一个模拟卸载事件的系统
var myUnload = (function () {
var queue = [],
myUnload = function () {
queue.forEach(function (unloadFunc) {
undloadFunc();
});
queue = [];
};
myUnload.add = function (unloadFunc) {
queue.push(unloadFunc);
};
return myUnload;
}());
加载新页面的代码应该在加载新页面之前运行myUnload()
function loadPage(url) {
myUnload();
$('#page').load(url);
}
页面加载的任何代码都可以调用myUnload.add()
,以注册一个在加载新页面时应该运行的清理函数
// some .js file that is loaded by a page
(function () {
var doSomething = function () {
// do something here
},
timer = setInterval(doSomething, 1000);
// register our cleanup callback with unload event system
myUnload.add(function () {
// since all of this code is isolated in an IIFE,
// clearing the timer will remove the last reference to
// doSomething and it will automatically be GCed
// This callback, the timer var and the enclosing IIFE
// will be GCed too when myUnload sets queue back to an empty array.
clearInterval(timer);
});
}());
将它们留在内存中是很好的,因为它们很小而且不相关(几kb)。我关心的是阻止他们跑步。你能给我一个关于如何在内联javascript中使用此链接中的信息的提示吗?问题是我必须通过PHP生成它,因为循环中有基于数据库数据的可变数量的请求。无需任何代码,我将根据建议更改和调整我的请求。clearInterval听起来不错,我同意。同样感谢这个覆盖技巧,我现在知道了js是如何工作的。所有通用函数和变量都是在窗口中定义的。。。因此,如果您有一个名为doSomething
的通用函数,您可以通过窗口访问它。。。或者通过设置window.doSomething=undef来清除它
那么每个子页面都应该包含自己的“销毁”函数,用于清除加载的相同页面上的脚本?当加载另一个子页面时,该函数将调用destroy函数?这非常有用,因为我想知道如何以非硬编码的方式集成所有这些页面