JS似乎停留在Ajax重新加载页面上的DOM
JS seems to stay in DOM on Ajax reloaded pages
好吧,这是一个奇怪的错误,因为它是我正在创建的第一个没有任何完全重新加载的 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));
我希望这对某人来说会派上用场。
相关文章:
- 加载dom后禁用媒体查询
- angularjs-bindng-click从jquery动态加载DOM
- 向使用jQuery加载DOM后添加的字段添加不受限制的文本输入DatePickers
- chrome扩展在加载dom之前注入动态css
- 删除在加载dom之后创建的动态元素
- 在完全加载 DOM 之前更改 DOM 的方法
- 加载 DOM 并使用 .Net 在服务器端执行 javascript
- 加载 DOM 后无法读取动态创建的复选框的属性
- getElementById 在加载 dom 后返回未定义
- 在完全加载DOM之前隐藏父元素
- jQuery在完全加载DOM后严格执行操作
- 使用ng视图属性时不加载DOM元素
- 如何在加载DOM元素后立即获取该元素
- 替换jquery's仅在加载DOM功能后运行
- JavaScript模糊事件不适用于加载DOM后添加的项
- 阻止加载DOM对象
- 如果在加载DOM时找不到javascript库,我该如何动态更改它
- 加载DOM后,如何使用jQuery从Select输入中获取值
- 如何在加载DOM之前开始加载iframe
- 加载dom后,使用jquery更改js代码