2011-07-28 126 views
0

我的網頁具有自動刷新功能。自動刷新是使用定時器實現的。防止瀏覽器中的競態條件JavaScript頁面刷新

GInterValId = window.setInterval("AutoRefresh()",interval); 

用戶還可以通過點擊頁面上的一些按鈕來執行一些操作。自動刷新功能和用戶操作正在創建競爭條件。

我想阻止兩個操作(自動刷新和按鈕操作)同時發生。

我該怎麼做?

+2

爲什麼你會自動刷新。重新設計它不是狗屎 – Raynos

+0

另外:不要傳遞給setInterval和setTimeout的字符串。直接傳遞函數,所以你不使用邪惡的eval:'setInterval(AutoRefresh,interval)' – hugomg

+0

@missingno - 當你可以傳遞函數的直接引用時,傳遞一個字符串到setInterval可能很愚蠢,但是沒有任何東西它的惡意並沒有傷害或危險。 – jfriend00

回答

3

你看這個:

busy = false; 

function AutoRefresh() { 
    if(busy) return; 
    busy = true; 
    ... 
    ... 
    ... 
    busy = false; 
} 

function ButtonOperation() { 
    if(busy) return; 
    busy = true; 
    ... 
    ... 
    ... 
    busy = false; 
} 
0

我相信你真的想發生什麼是按鈕操作即可完成頁面具有自動刷新之前。在這種情況下,我會讓按鈕操作函數將操作添加到隊列中,然後讓AutoRefresh函數在刷新之前運行操作。