我有一个Ajax调用,目前需要同步执行。然而,在此Ajax调用执行时,浏览器界面会冻结,直到调用返回。在超时的情况下,这可能会导致浏览器冻结相当长的时间。
是否有任何方法可以让浏览器(任何浏览器)刷新用户界面,但不执行任何Javascript?理想情况下,它应该是一些命令,例如
如果可能的话,那么我可以用类似以下的代码替换同步Ajax调用:
我不能使用setTimeout,或者在回调函数中恢复函数的原因是执行流程不能被中断:(有太多的状态变量都相互依赖,并且long_function()的流程必须以某种方式恢复):
是否有任何方法可以让浏览器(任何浏览器)刷新用户界面,但不执行任何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;
}
do_sync_jax_call();
。 - Nick Craver