2012-06-27 102 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沒有任何問題:)。 –