此问题涉及并发问题,有关如何显示忙碌图标的建议,请参阅此问题:Javascript - loading/busy indicator or transparent div over page on event click
当用户在页面上发起 AJAX 请求时,显示某种“工作”或忙碌图标或进度指示器很有用。如果只有一个长时间运行的进程,则可以以相对简单的方式处理:
function do_action() {
show_busy_icon();
long_running_asynchronous_process(function() {
// Callback function run when process finishes
hide_busy_icon();
});
}
但是,如果页面上正在运行多个异步进程,则使用 on/off 方法将不起作用。即使有其他进程正在运行,第一个完成的进程也会关闭图标。
那么,您如何处理在网页上显示一个指示器,即当有一个或多个进程在运行时打开,当没有进程在运行时关闭?
我想有可能保持对正在运行的进程数的计数。hide_busy_icon()
仅当进程计数为 0 时才隐藏图标。这似乎有点容易失败。也许我没有看到更好/更简单的方法。
感谢您的想法和建议!
编辑:在标记答案中使用解决方案一段时间后,我很高兴地说它运行良好。我遇到的唯一问题是我自己的脚本调用我无法控制的脚本函数的情况。除非这些函数允许提供回调,否则无法在它们开始和结束时更新进程计数。
可能发生这种情况的一个示例是向 Google 地图添加一组标记。一旦我的脚本调用 Google 地图功能,忙碌图标就会消失,而标记仍在加载中。
我不确定处理这个问题的好方法。