2012-06-27 56 views
0
OK

这是一个奇怪的错误,因为它是第一个AJAX页面,而我创造它是一个错误我以前从来没有面对任何完整的重载......甚至互联网并不能帮助我 - 因为它似乎并不是一个常见的问题。JS似乎停留在DOM 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文件,如果解析属性设置设计不会被加载,而只是文件本身被加载 - 容易胡?

好吧,现在问题本身 - 很明显,页面随着时间变慢,但我并没有真正烦恼,因为我认为这是设计javascripts中的一些错误 - 但事实并非如此。

所以我看了看萤火,什么我见过解释了很多 - >的请求叠起来,每一个新的一页!当然,这会导致一个矫枉过正的...起初,我认为这只是“setInterval”的,并得到了一个解决方案,在每次重新加载时重置它们。

但是,这不是他们也似乎在“脚本”叠起来,因为我不认为这是一个普通的历史,只是重新加载脚本出现不止一次的唯一案例!

在右边的提示将是真正的帮助,因为我几乎被困在这儿了!

回答

0

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

不过也许有人卡在同一个问题,所以解决的办法是几乎是这样的: 你必须: 1.创建一个数组,其中存储您的间隔 2.打电话给你setIntervals这样 3.复位他们每一个“新窗口”

var intervalArr = new Array(); 

function killIntervals(){ 
while(intervalArr.length > 0) 
    clearInterval(intervalArr.pop()); 
}; 

这些都是阵列和功能

因此,这些应该在你的AJAX请求的功能被添加上:

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

我希望这会派上用场的人。

+0

你在原始代码中用'setInterval'做了什么?你是否定期调用Ajax函数?通常你应该避免在Ajax中使用'setInterval',因为你永远不知道请求何时完成。改用'setTimeout'并在成功回调中调用它。这样,你只有一次超时运行。 –

+0

如果设置了VAR来阻止它,直到成功这不是一个大问题 - >,例如VAR blockit =假的 - 成功blockit> =假的 - - >函数调用blockit =真有可以避开unneccesary调用和使用的setInterval没有任何问题:)。 –