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

时间:2015-07-20 07:23:49

标签: javascript php jquery

我正在建立一个动态网站,通过jquery的load()加载“body”div中的所有页面。问题是我在加载的PHP页面中有一个使用setInterval循环的脚本,原因是我希望仅在显示该页面时加载脚本。现在我发现脚本在“离开”页面后继续运行(在div中加载其他东西而不刷新)如果我继续离开/返回循环堆栈,我的服务器充满了GET请求(来自javascript)。

离开页面后卸载所有JS的好方法是什么?我可以做一个简单的虚拟var来不加载脚本两次,但我想在离开页面后停止循环,因为它导致无用的流量和喷出控制台错误,因为它应该填充的元素不再存在。

很抱歉,如果已经提出过这个问题,但很难为此提出关键字。

3 个答案:

答案 0 :(得分:1)

1)你为什么不试试clearInterval? 2)如果你有一般(主要)function a( ) { ... }做某事,你可以用function a() { };无所事事地覆盖它 3)如果你对某些东西的引用为空它将被垃圾收集

没有提供代码,因此我无法帮助您

答案 1 :(得分:0)

这听起来像你需要重新评估你的设计。您需要删除ajax,或者您不需要在方法名称中发生冲突。

您可以查看以下链接:http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml

其中提供了有关如何从DOM中删除javascript的信息。但是,现代浏览器会将代码留在浏览器的内存中。

答案 2 :(得分:0)

由于您没有处理实际页面加载/卸载,我将构建一个模拟卸载事件的系统。

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);
  });
}());