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