JQuery Keyup Ajax Запрос: убить предыдущие запросы - PullRequest
4 голосов
/ 10 ноября 2011

У меня есть скрипт, который выполняет ajax-запрос на событие keyup в моем окне ввода поиска.Я замечаю в Firefox (я смотрю на консоль), что каждый отправленный запрос завершается.Таким образом, существует множество запросов ajax.

Есть ли способ уничтожить выполняющийся запрос ajax при событии keyup?

jQuery:

jQuery(function() {
  var request;
  request = function(url, keyword) {
    return $.post('/backpack/' + url + '/search?keyword=' + keyword, function(data) {
      var el;
      el = "#result_" + url;
      return $(el).html(data);
    });
  };
  $("#search_text").bind("keyup", function() {
    var query, url, _i, _len, _ref;
    query = $(this).val();
    if (query.length > 2) {
      _ref = ['tracks', 'albums', 'artists'];
      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
        url = _ref[_i];
        request(url, query);
      }
      return $("#search_suggestions").show();
    } else {
      return $("#search_suggestions").hide();
    }
  });
  return $("#suggestion_all_results").bind("click", function() {
    return $('#search_form form').submit();
  });
});

Ответы [ 2 ]

4 голосов
/ 10 ноября 2011

Здесь уже дан ответ в Ultimate-Uber-Authority Thread .

Краткий ответ: он возвращает объект XHR, и вы можете вызвать abort()

Если вы отправляете события keyup, вы также можете подумать о добавлении задержки;это будет довольно большая нагрузка на ваш сервер, поэтому подождите несколько секунд между ударами, прежде чем удосужиться начать событие.

Как сказал Эрв Уолтер в комментариях вышеупомянутой ветки:Если сервер уже получил запрос, он может продолжить обработку запроса (в зависимости от платформы сервера), даже если браузер больше не ожидает ответа. Не существует надежного способа остановить остановку веб-сервера на своем сервере.отслеживает обработку обрабатываемого запроса. "

Я сталкивался с теми же проблемами, что и поиск в ajax предлагаем;)

0 голосов
/ 10 ноября 2011

Вам просто нужно сохранить возвращаемое значение каждого отправленного вами запроса и, прежде чем добавить новый, просто сначала выполните savedRequest.abort().

...