我有一个目前需要同步的Ajax调用。但是,在执行此Ajax调用时,浏览器界面会冻结,直到调用返回。在超时的情况下,这可以冻结浏览器significant period of time。是否有可能在浏览器窗口在Javascript循环中更新?
有什么办法让浏览器(任何浏览器)刷新用户界面,但不执行任何Javascript?理想情况下,它会是一些命令,如window.update()
,这将让用户界面线程刷新。
如果这是有可能的话,我会的东西,如更换同步AJAX调用:
obj = do_async_ajax_call();
while (!obj.hasReturned()) {
window.update();
}
// synchronous call can resume
,我不能用setTimeout
,或在回调恢复功能的原因,在于执行流程不能被中断:(有太多的状态变量都依赖于对方,而long_function()
流动本来会以某种方式恢复):
function long_function() {
// lots of code, reads/writes variable 'a', 'b', ...
if (sync_call_is_true()) {
// lots of code, reads/writes variable 'a', 'b', ...
} else {
// lots of code, reads/writes variable 'a', 'b', ...
}
// lots of code, reads/writes variable 'a', 'b', ...
return calculated_value;
}
为什么呼叫需要同步? – 2010-02-03 00:08:03
你可以发布整个通话代码吗?这可能可以简化,并使用XHR函数来支持你需要的东西(除非jQuery是一个选项,然后更清洁)。如果这两个选项都不是,我要求你将该函数重命名为'do_sync_jax_call();' – 2010-02-03 00:08:28