2013-05-26 36 views
0

我正在使用setInterval的項目。我已經讀了一點,但我真的不明白。會發生什麼呢,它工作正常,但大約20秒後,它開始變得越來越快,直到它滯後我的電腦。setInterval JavaScript不起作用

var autorefresh = setInterval(function() { 
    $('#holder').fadeOut('slow').load('index.php').fadeIn('slow'); 
}, 5000); 

正如我所說,這工作正常,直到它開始變得越來越快。

+0

你知道'load'沒有放在'fx'隊列中,而是立即執行嗎? – Bergi

回答

7

我不知道你在做什麼,但是這段代碼會做的事情是增加同時運行的函數的數量,直到如你所說的那樣,它變得難以管理。如果一個請求的時間超過5秒(如果你有很多頁面獲取創建高負載,這是可能的),那麼隨時可以有多個負載正在進行。

編輯:提問者想「每隔5秒刷新一次div」。

這是不工作的原因是因爲刷新不是即時的,它需要時間。但是,無論負載需要多長時間,循環都不會重複並刷新5秒。這意味着網絡在任何時候都可能會響應一個ajax請求和fadeIn,您可能會同時運行兩個fadeIn s。

爲了解決這個問題,我們等到ajax loadfadeIn已經完成,然後再爲另一個請求設置timeOut

var refresh = function() { 
    $('#holder').fadeOut('slow').load('index.php').fadeIn("slow", 
     function(){setTimeout(refresh,5000)}); 
} 
refresh(); 
+0

好的,我該如何解決這個問題? – user1926053

+0

你想做什麼? – Joe

+0

你可以給我們一些背景知道你想用這段代碼先完成什麼? – alexpls