Вы хотите использовать асинхронный XHR - в настоящее время вы выполняете синхронный запрос, поэтому страница должна зависнуть до завершения загрузки. Асинхронный XHR вызывает функцию callbck, которую вы предоставляете с обновлениями состояния загрузки.
Если память служит, вам просто нужно сделать
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) loadFinished();
}
xhr.open(requestType, url, true);
Где true
делает запрос асинхронным.