使用AJAX加载页面并取消以前的JavaScript

时间:2018-05-28 16:46:59

标签: javascript html ajax

我正在创建一个网站,通过AJAX加载新打开的页面。每个页面仅对该页面使用global.js和.js。问题是,当我加载新页面时,无论如何都会保留上一页的JavaScript。

我的AJAX:

$.post({
      url: "./some_url",
      dataType: 'html',
      data: { ajax: true },
      success: function(data) {
        //Here I would need a way to stop all the previous JavaScript
        $("#site").empty().append(data);
      }
});

现在我正在寻找这种情况的最佳解决方案,因为在某些情况下,一个页面将运行javascript运行x(由此我的意思是一个函数将循环执行一些东西)所以我将不得不添加一些if语句来检查我是否还在正确的页面上。

所以问题是我应该如何解决它,是否有办法卸载一些javascript或者我应该将所有函数包装到一个对象中并使该对象为空?

还会删除通过javascript添加的已删除的html元素EventListeners,或者它们是否会实际停留在某处,直到我手动删除它们为止?

1 个答案:

答案 0 :(得分:0)

好的AJAX用于处理后台请求,只是因为没有再次加载所有页面所以......你的逻辑似乎无效。

无论如何,您可以删除页面内的脚本或链接到js源:

<script id="mustBeRemoved">....</script>

然后使用jQuery:

$("#mustBeRemoved").remove();

或者使用简单的JS:

element.parentNode.removeChild(document.getElementById("mustBeRemoved"));

现在的事实是删除它? 只需在不再需要它时删除它(例如,在AJAX请求之前,或者只是在响应时,在加载其他内容之前)。

修改 加载脚本后,它定义的对象和函数将保留在内存中。删除脚本元素不会删除它定义的对象。这与CSS文件形成对比,其中删除元素会删除它定义的样式。那是因为新款式很容易回流。

但是,如果您有一个定义“myFunction”的文件,那么您添加另一个将myFunction重新定义为其他内容的脚本,将保留新值。如果你想保持DOM干净,你可以删除旧的脚本标签,但这一切都是删除它。

我能想到的唯一真实方式到“清理”功能是有一个JS文件基本上为每个可能的对象和函数调用delete window.myFunction,你的其他脚本文件可能会定义。出于显而易见的原因,这是一个非常糟糕的主意。

如果你可以在编码之前分析你需要的js,那么你可以避免这个问题。如果你的项目已经足够开发用于返回,那么最好的方法似乎是删除旧脚本或链接到旧脚本,并重新声明这些函数只是什么都不做(或做新的不同的事情)。