Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 卸载通过load()加载的JS以避免重复?_Javascript_Php_Jquery - Fatal编程技术网

Javascript 卸载通过load()加载的JS以避免重复?

Javascript 卸载通过load()加载的JS以避免重复?,javascript,php,jquery,Javascript,Php,Jquery,我正在构建一个动态网站,通过jquery的load()加载“body”div中的所有页面。问题是我在加载的PHP页面中有一个使用setInterval循环的脚本,原因是我只希望在显示该页面时加载该脚本。现在我发现,即使在“离开”页面(在div中加载其他内容而不刷新)之后,脚本仍会继续运行,如果我继续离开/返回循环,则会用GET请求(来自javascript)淹没我的服务器 离开页面后卸载所有JS的好方法是什么?我可以做一个简单的虚拟变量,不加载脚本两次,但我想在离开页面后停止循环,因为它会导致无

我正在构建一个动态网站,通过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函数?这非常有用,因为我想知道如何以非硬编码的方式集成所有这些页面