Как отключить асинхронность в JS?
Например, с помощью синхронного
XMLHttpRequest
, что в приведенном примере кода как раз таки и сделано.
Всё (весь коллбек на событие клика) выполняется синхронно в рамках одной макро-задачи.
Т.е., внезапно, наоборот, — чтобы все работало, как задумано, надо
включить асинхронность, а, точнее,
не выключать ее. Ибо изменения в DOM происходят после завершения макро-задачи.
Первое изменение DOM (вывод текста загрузки) затирается сразу же изменением DOM, которое выводит данные полученного JSON.
И первое изменение DOM не может отрендериться, т.к. эвент луп заблокирован синхронным запросом. Оно ждет завершение запроса, а после него уже происходит другое, затирающее изменение.