我正在编写一个简单的基于dojo的应用程序,在其中我使用setTimeout(clearMessage())方法在UI(jsp)上显示一些“进行中”的消息和微调器,以显示一段时间的消息。
在Firefox上,xhrGet调用暂时转到服务器并返回,此消息显示给用户操作正在进行中。一旦操作以状态响应,此消息将更新为“Operation done successfully”。
但是在IE上,我发现一旦xhrGet调用被发送,IE UI就会冻结,直到服务器返回响应。由于这种行为,IE上根本不会出现我的“正在进行”消息。
我还读到一些评论说,一些浏览器可以冻结这种方式在Ajax call freezes UI in internet explorer but works fine in firefox的同步调用。有没有一种方法,我可以让我的'正在进行'的消息显示在IE上,以及,同时保留同步:真正的属性xhrGet?
有什么需要帮忙的吗?
先谢了。
1条答案
按热度按时间cidc1ykv1#
永远不要在同步模式下使用XmlHttpRequest,这样做会导致浏览器挂起和强制关闭的很大比例:https://web.archive.org/web/20111103102354/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。