我正在编写一个简单的基于dojo的应用程序,其中我在UI(jsp)上使用setTimeout(clearMessage())方法显示一些“正在进行中”的消息和微调器以显示消息。
在Firefox上,当时xhrGet调用将转到服务器并返回,此消息将显示给用户该操作正在进行中。一旦操作响应状态,消息就会更新为“操作成功完成”。
但是在IE上,我看到一旦发送了xhrGet调用,IE UI就会冻结,直到响应从服务器返回。由于这种行为,我的“进行中”消息根本没有出现在IE上。
我还阅读了一些评论,一些浏览器可能会冻结Ajax call freezes UI in internet explorer but works fine in firefox同步调用的方式。有没有办法,我可以在IE上显示我的'正在进行中'消息,同时保留同步:xhrGet的真正的attaribute?
对此有何帮助表示赞赏?
提前致谢。
答案 0 :(得分: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。