Я задал почти тот же вопрос очень давно ( здесь ), и известный Т. Дж. Краудер предложил отличное решение. Клиент (страница) отправляет дополнительный параметр при запросе файла. Дополнительный параметр должен быть некоторой случайной строкой. Затем вы запускаете модальное диалоговое окно «Подождите ...».
Теперь на сервере, когда вы готовите ответ, вы устанавливаете в cookie значение этого дополнительного параметра. Клиент, в свою очередь, должен запустить интервальный таймер, который просто просматривает document.cookie
каждые 100 миллисекунд или около того, проверяя это случайное значение. Как только файл cookie содержит случайное значение, вы знаете, что HTTP-ответ поступил с сервера! В этот момент вы можете скрыть модальное диалоговое окно или что-то еще.