Недавно у меня возникала необходимость показывать прелоадер каждый раз, когда в проекте отправляется запрос на удаленный сервер. Так как мы используем Babel для конвертации кода из ES6 в ES5, то fetch
превращается в XMLHttpRequest
. Это значит, что можно легко переписать два метода и задача будет решена.
var _oldSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function () {
var _oldReadyStateChange = this.onreadystatechange;
// Ваш код вначале Ajax-запроса
_oldSend.apply(this, arguments);
this.onreadystatechange = function () {
if (this.readyState === 4) {
// Ваш код, когда Ajax-запрос завершен
}
if (typeof _oldReadyStateChange === 'function') {
_oldReadyStateChange.apply(this, arguments);
}
};
};
Для того, чтобы показать индикатор закгрузки, я переписал метод send
, сохранив предварительно старую функцию в переменную _oldSend
. Ну а onreadystatechange
сообщает нам когда запрос завершен.
Этот способ отлично подойдет, если вы используете jQuery
.