Суперагентный эквивалент jjery's ajaxStart ajaxStop
Моя команда в настоящее время пытается избавиться от нашего jQuery. Нам удалось избавиться от всех наших селекторов, и мы находимся в процессе рефакторинга из наших вызовов ajax, но мы пытаемся воссоздать функции ajaxStart и ajaxStop.
Я просматривал документы SuperAgent и не могу найти ничего похожего на это. Кто-нибудь знает что-то подобное в SuperAgent или знает, как воссоздать это с помощью слушателей событий или что-то в этом роде?
Моя альтернатива - просто добавлять изменения отображения непосредственно к каждому запросу, что составляет 200 строк, которых я бы хотел избежать.
window.onload = function() {
$(document)
.ajaxStart(function(){
document.getElementById('ajaxSpinner').style.display = 'block';
})
.ajaxStop(function(){
document.getElementById('ajaxSpinner').style.display = 'none';
});
}
Изменить: мы выяснили, как использовать принятый ответ в нашей базе кода. Мы переместили код в выбранном ответе в его собственный модуль, который нам нужен везде, где мы используем SuperAgent. В каждый из наших вызовов мы теперь включаем.use(Module.stats). Пока что это решение работает, однако мы еще не начали кросс-браузерное тестирование. Спасибо за вашу помощь!
Edit2: Occassion потребовал от нас перестроить приложение. Принятый ответ не работает с самой последней версией SuperAgent, нам пришлось откатить его до версии 1.7.2.
1 ответ
https://github.com/visionmedia/superagent/issues/861
надеюсь, что ссылка выше полезна
код цитаты:
function stats(req) {
req.once('request', function() {
// ajaxstart
req._startedAt = Date.now();
});
req.once('error', function() {
// an error,the request fail
});
req.once('end', function() {
// ajaxstop
var use = Date.now() - req._startedAt;
});
}
function get(url) {
return request.get(url)
.use(stats);
}
Request.prototype._end = Request.prototype.end;
Request.prototype.end = function(fn) {
this.emit('request');
this._end(fn);
}