Суперагентный эквивалент 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);
}
Другие вопросы по тегам