2011-02-28 79 views
0

我可能失去了一些东西在这里真的很明显在更新......页面元素并不明显负载

我展示页面加载过程中与进度条的对话框。对话框和进度条都是jQueryUI小部件。有几个阶段的加载 - 页面加载jQuery $ .get()请求来加载资源,然后在$(document).ajaxStop()事件中,处理这些资源。在整个过程中,我正在更新进度栏和一些状态文本。

问题是,只要ajaxStop事件触发,更新就会停止。该代码在资源加载期间很好地工作,但然后冻结,并且在处理期间没有看到任何更新。如果我在Chrome中的post-ajaxStop更新中添加断点并逐句通过代码,则屏幕会正确更新,以便我知道代码正常工作。

任何人都可以解释为什么一切都在我的AJAX加载阶段很好地更新,但然后停止在ajaxStop事件?事后有没有简单的方法让更新继续?

谢谢!

+0

你可能会发布一个链接,以便它可以被复制吗? – pimvdb 2011-02-28 11:53:36

+0

不幸的是我无法发布链接。进一步的研究表明,这是因为浏览器在Javascript实际执行时不会更新屏幕。我猜它可以在Ajax阶段工作,因为控件在请求完成时返回给浏览器。我需要一些方法在每次迭代时将控制权交还给浏览器 - 这可能是使用setTimeout或类似的方法,但是在我的代码中很难实现... – 2011-02-28 12:23:18

回答

0

后来搜索的几个小时内,following blog我指出了正确的方向:

有一个在它允许你定义两个函数,一个计算和一个更新UI项描述的jQuery的扩展。它使用setTimeout函数交替调度它们。

我不得不重写我的代码,类似于延续传递样式,以便每个函数使用setTimeout计划其延续。这会将控件返回浏览器足够长的时间,以便屏幕更新。

虽然为了避免浏览器/ JavaScript的限制,但这感觉就像是一种黑客攻击。任何人都知道更好的方法?