JQuery AJAX-запрос медленный, хотя все предыдущие запросы были прерваны - PullRequest
3 голосов
/ 15 августа 2010

У меня есть поисковый фильтр, который запускает ajax-запрос на обновление результирующего набора при смене фильтров. Часто случается так, что пользователь за один раз меняет множество фильтров, запуская множество AJAX-запросов.

Поэтому я решил прервать предыдущие запросы, если делается новый (с помощью функции ajax.abort ()). Теперь ... Firebug показывает все эти запросы как прерванные, но последний запрос (единственный не прерванный) занимает все больше времени, чем больше прерванных запросов перед ним.

Так, например, если я изменю только один фильтр, загрузка запроса займет 1 секунду. Но если я заменил 5 фильтров за один раз, он отменяет 4 из них, оставляя только последний запрос. Однако выполнение этого запроса занимает 5 секунд.

Кто-нибудь знает, почему это? Я предполагаю, что даже если jQuery прерывает запрос, мой сервер все еще обрабатывает его? (Я использую локальный Rails Mongrel в режиме разработки, к вашему сведению) Это побеждает все причины, по которым я прервал запросы ... Что я могу сделать, чтобы решить эту проблему ??

Помощь очень ценится!

1 Ответ

1 голос
/ 15 августа 2010

Возможно, вы захотите попробовать подход, задерживая запросы, если пользовательские параметры поиска вводятся быстро.Например, в одном из моих приложений я жду, пока пользователь не остановится на полсекунды.

  $("#user_login").keypress(function() {
    var login = this;
    if (this.value != this.lastValue) {
      $("#loading_small").addClass("loading-small");
      if (this.timer) { clearTimeout(this.timer); }
      this.timer = setTimeout(function() { 
        $.get("/users/login_validate", $(login).serialize(), function(data) {
          $("#loading_small").removeClass("loading-small");
          $("#login_valid").fadeIn().html(data);
        });
      }, 500);
    }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...