Javascript 文件在 ajax 导航中出现重复

标签 javascript jquery ajax browser duplicates

我在使用 AJAX 时遇到了问题导航,问题是加载的 javascript 文件在加载新内容后仍保留在浏览器中,即使它们不在 DOM 中也是如此。不再,它们显示为 VM浏览器控制台中的文件并执行其中的代码。我不希望发生这种情况,因为当新内容来自 AJAX 时,它应该被替换的 javascript 文件。 .

我的 DOM 结构是这样的:

<body>
    <header></header>

    <main id="contentToBeReplaced">

        <p>New content with its own js</p>
        <script>
            var script = "js/new.js";
            $.getScript(script);
        </script>
    </main>

    <footer></footer>

    <script src="js/main.js"></script>
</body>

每次加载带有自己的 javascript 文件的页面时,都会出现一个新的 VM归档并保留所有旧的,这是一个问题:
enter image description here

那么,这是什么问题,我该如何解决?我需要防止重复文件并在加载新文件时删除 js 文件。

最佳答案

Javascript 全局执行上下文中的每个唯一条目只能表示单个对象或变量。将相同的函数重复加载到全局上下文将一次又一次地替换函数代码。

您应该管理延迟加载的脚本,使它们在您的全局上下文(或您使用的框架)中代表相同的条目

看下面的示例js代码,假设在两个不同的时间延迟加载

//script 1

var dynFun = function() {
                console.log('Loaded early');
             {



//script 2
var dynFun = function() {
                console.log('Loaded late');
             {

现在,如果您加载脚本一并执行 dynFun(),它将注销 “Loaded early”。现在,此时,如果您加载第二个脚本并再次执行 dynFun(),它将注销 "Loaded late"

但是,如果这些函数中的每一个都启动像 setTimeout 这样的自动过程,它们将继续运行直到页面关闭。

在这种情况下,您的动态脚本应该先做一些清理工作。

var timeTracker;   //This is global

var dynFun = function() {
                  if (timeTracker)
                      clearTimeout(timeTracker)

                   timeTracker = setTimeout(someFn, 1000)   
             {

记住——你不能决定在像 JS 这样的垃圾收集语言中释放内存。您只能通过操纵对对象的引用来欺骗清理过程。

关于Javascript 文件在 ajax 导航中出现重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56851456/

相关文章:

java - Android/Java多线程-线程直到主线程完成工作才继续

javascript - Internet Explorer 的 Fancybox Iframe 错误

php - 如何在 jQuery 的一个变量中添加两个serializeArray()?

javascript - 如何避免创建多个 if/语句和/或函数实例

java - 将组件值和另一个参数发送给监听器

javascript - Angular 7 : How to access/send only body part of HTTP Response from test case

javascript - Mozilla 并没有完美地执行这段代码,尽管它可以在 Chrome 和 IE 上运行

javascript - 使用 ajax 更新 Shopify 购物车而不刷新页面

php - 自动加载结果一遍又一遍地获取相同的结果

javascript - 内容导出服务器错误