2013-07-10 48 views
0

我正在寫一個簡單的基於dojo的應用程序,我用setTimeout(clearMessage())在UI(jsp)上顯示一些'進行中'消息和旋轉器方法來顯示消息的某個時間。Dojo xhrget同步:真正的調用凍結IE用戶界面,而FF工作正常

在Firefox上,當時xhrGet調用會進入服務器並返回,此消息會向用戶顯示該操作正在進行中。一旦該操作以狀態響應,則該消息被更新爲「操作成功完成」。

但在IE上,我發現一旦發送了xhrGet調用,IE UI凍結,直到響應從服務器返回。由於這種行爲,我的'正在進行'消息根本不在IE上。

我也讀了一些評論,一些瀏覽器可能會凍結這種方式在Ajax call freezes UI in internet explorer but works fine in firefox同步呼叫。有沒有辦法,我可以在IE上顯示我的「正在進行中」消息,同時保留同步:真正的xhrGet的attaribute?

這裏的任何幫助表示讚賞?

在此先感謝。

+0

一些代碼示例可能有幫助,老實說,我不確定它爲什麼在FireFox中工作,因爲它也是單線程的,這就是爲什麼同步xhr被認爲是一個很糟糕的做法... –

+0

有沒有一個很好的理由爲什麼你要同步:真?除非它是在頁面卸載之前觸發的ajax調用,否則我看不到實際的用例......另外,您使用的是哪種dojo版本? – Philippe

+0

嗨Phillippe,我們使用Dojo 1.8。這種情況是用戶從用戶界面發起的操作,用戶界面正在等待的響應,同時我不希望用戶可以自由地執行任何其他操作。如果他這樣做,則以前的操作的響應不能顯示給他/她,新的響應將覆蓋響應區域。 – Shankar

回答

0

永遠不要在同步模式下使用XmlHttpRequest。這樣做對瀏覽器的大量掛起和強制關閉負責:http://blogs.msdn.com/b/ieinternals/archive/2011/08/03/do-not-use-xmlhttprequest-in-synchronous-mode-unless-you-like-to-hang.aspx。這是因爲Sync模式會阻塞UI線程,直到返回HTTP響應; UI線程是JavaScript運行的地方,以及UI更新和用戶輸入事件響應的生成位置。

相反,您應該以異步模式編寫代碼,並在返回響應時使用回調來更新UI。

相關問題