2012-11-27 19 views
3

我的瀏覽器每隔20秒使用window.setTimeout()向服務器發送保持活動的異步調用。問題:當彈出alert()時,AJAX調用被暫停。如果用戶在解除彈出窗口之前等待了一段時間 - 服務器將(錯誤地)關閉登錄會話。在alert()打開時創建異步AJAX

我們使用alert()彈出錯誤消息,我不能使用其他方法,因爲這是產品定義。

任何方法來解決這個問題?謝謝

回答

4

alert()以及prompt()所有阻止UI線程,這意味着所有其他操作被暫停。

我建議你使用模態窗口,而不是像the ones in jQueryUI

0

對不起,爲什麼你不能使用警報以外的東西?警報不是很有吸引力或用戶友好。一個簡單的模式窗口(如爲例)是更好的...

3

由於@JosephtheDreamer在他的回答中提到,alertpromptconfirm都將阻止用戶界面。

如果你真的想使用alert,那麼你可以使用WebWorkers。它們在單獨的線程中運行,因此不會受到UI阻塞的影響。他們有decent support,但像往常一樣在IE不工作< 10.

這實際上是相當複雜的,所以我會建議遵循@ JosephtheDreamer的建議,並與模態窗口。他們不難做,並且會更簡單地解決問題。請參閱mdn

+0

啊,我知道我遺漏了一些東西。這是'confirm()'。很長一段時間沒有使用過。 – Joseph

+0

我今天就用它=)在我的情況下,阻止用戶界面是故意的。有一個按鈕可以刪除數據庫中的所有內容,所以我想確保用戶收到了這條消息。 – tjameson

0

嘗試更換默認的警報行爲

window.alert = function(message) { 
// put your dialog box launching code here. 

}

或本

alert = function(foo) { 
// some functionality 

};