JS似乎停留在Ajax重新加载页面上的DOM

JS seems to stay in DOM on Ajax reloaded pages

本文关键字:加载 DOM 停留在 Ajax 新加载 JS      更新时间:2023-09-26

好吧,这是一个奇怪的错误,因为它是我正在创建的第一个没有任何完全重新加载的 ajax 页面,这是我以前从未面对过的错误......甚至互联网也对我没有帮助——因为这似乎不是一个常见的问题。

让我们一步一步地进入问题:我有一个页面,其中 Ajax 请求由一个简化的函数触发,如下所示:

$("a[rel='tab']").live('click',function(e) {
pageurl = $(this).attr('href');
$.ajax({url:pageurl+'?rel=tab',success: function(data){
  $('#content').html(data);
}});
if(pageurl!=window.location){
  window.history.pushState({path:pageurl},'',pageurl);
}
e.preventDefault();
return false;
});

这是由PHP文件解析的,如果设置了该属性,则不会加载设计,而只会加载文件本身 - 容易吗?

好的,现在问题本身 - 很明显页面随着时间的推移变慢了,但起初我并没有真正打扰,因为我认为这是设计 javascript 中的一些错误 - 但事实并非如此。

所以我看了一下萤火虫,我所看到的解释了很多 -> 请求与每个新页面叠加!当然,这会导致矫枉过正...起初我以为这只是"setInterval",并运行了一个解决方法,可以在每次重新加载时重置它们。

但这并不是它们似乎也在"脚本"中堆叠的唯一情况,因为我认为这不是一个普通的历史,因为只是重新加载的脚本出现不止一次!

右边的任何提示都会非常有帮助,因为我几乎被困在这里!

好的,因为问题似乎与 setInterval 有关 - 在尝试了一段时间后,我得出的结论是这是主要问题,它只是火虫本身的某种循环。

但是,也许有人陷入了相同的问题,因此解决方案几乎是这样的:您必须:1. 创建一个数组来存储您的间隔2. 以这种方式调用您的设置间隔3.在每个"新窗口"上重置它们

var intervalArr = new Array();
function killIntervals(){
while(intervalArr.length > 0)
    clearInterval(intervalArr.pop());
};

这些是数组和函数

因此,这些应该添加到您的 AJAX 请求函数中:

killIntervals();
intervalArr.push(setInterval (yourintervalfunction, 5000));

我希望这对某人来说会派上用场。