Этот вопрос касается вопросов параллелизма, для получения рекомендаций о том, как отобразить значок «занят», см. Этот вопрос: Javascript - индикатор загрузки / занятости или прозрачный div на странице при нажатии на событие
Когда пользователь инициирует запрос 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 maps, значок «занят» исчезает, а маркеры все еще загружаются.
Я не уверен в хорошем способе справиться с этим.