Есть ли ошибка в этом аякс запросе?
Сначала устанавливаются обработчики (наблюдатели/слушатели/коллбеки) на определенные события. Затем запускается код, вызывающий их.
То есть, вот этот фрагмент кода - установка обработчика, который будет вызван при определенном условии:request.onreadystatechange = function() { .. }
В этой ситуации условие звучит как "Изменение состояния запроса".
https://learn.javascript.ru/ajax-xmlhttprequest#%D...
Это асинхронный вариант, с обработчиком события, сам запрос будет выполняться в отдельном потоке (параллельно остальному коду) и потом из этого потока зажгет ("выполнит") событие onreadystatechange. которое, разумеется, надежнее инициализировать до начала отправки запроса, изучайте события, они в JavaScript везде.