Подтвердить что ты не робот

Можно ли остановить "чтение" запросов на базовую станцию

У меня есть базовое приложение, которое имеет несколько видов. Переключение между представлениями вызывает запросы Ajax для получения разных коллекций. Я бы хотел остановить текущий запрос "читать" ajax, если запускается новый. Возможно ли это?

4b9b3361

Ответ 1

Итак, вот что я сделал

Я сохраняю запросы на выборку в переменной

app.fetchXhr = this.model.fetch();

В моем маршрутизаторе у меня есть функция, которая заботится о закрытии представлений и представлений рендеринга. Он также заботится о запуске любых триггеров, необходимых для каждого изменения вида, но это не относится к этому вопросу.

Прежде чем что-либо делать, эта функция маршрутизатора выполняет следующие

//Stop pending fetch
if(app.fetchXhr.readyState > 0 && app.fetchXhr.readyState < 4){
    app.fetchXhr.abort();
}

Я надеюсь, что это поможет

Ответ 2

Еще один поздний ответ на случай, если кто-то еще столкнется с этим.

Я закончил переписывание Backbone.sync, чтобы добавить пул объектов XHR и возможность прервать ожидающие запросы на выборку.

var sync = Backbone.sync
  , xhrPool = [];

Backbone.sync = function(method, model, options) {
  options = options || {};
  if (method === 'read') {
    if (options.abortPending == true) {      
      for (var i = 0; i < xhrPool.length; i++) {
        if (xhrPool[i]['readyState'] > 0 && xhrPool[i]['readyState'] < 4) {
          xhrPool[i].abort();
          xhrPool.splice(i, 1);
        }
      }
    }

    // cleanup xhrPool
    // todo: make removal from the pool an 'always' jqXHR callback
    // instead of cleanup on every read?
    for (var i = 0; i < xhrPool.length; i++) {
      if (xhrPool[i]['readyState'] === 4) {
        xhrPool.splice(i, 1);
      }
    }

    var xhr = sync(method, model, options);
    xhrPool.push(xhr);
    return xhr;
  } else {
    return sync(method, model, options);
  }
};

Ответ 3

Я предполагаю, что вы используете магистраль с jQuery. Если это так, следующий вопрос, кажется, дает вам ответ:

Отменить запросы Ajax с помощью jQuery

Backbone fetch возвращает xhr, о котором они говорят, IIRC.

Ответ 4

Возможно, поздний ответ:)

Используйте таймаут, чтобы указать значение тайм-аута. Это вызовет функцию ошибки. Здесь запрос может быть прерван.

Есть ли причина, по которой вы хотите прервать запрос?