即使所有先前的请求都中止,jQuery AJAX请求也会变慢

时间:2010-08-15 00:37:51

标签: ruby-on-rails ajax jquery

我有一个搜索过滤器,可以在更改过滤器时触发ajax请求以更新结果集。通常情况下,用户将一次性更改许多过滤器,从而触发许多AJAX请求。

所以我决定中止先前的请求(如果是新的请求)(通过使用ajax.abort()函数)。现在...... Firebug将所有这些请求显示为已中止,但最后一个请求(唯一一个未中止的请求)需要越来越长的请求。

因此,例如,如果我只更改一个过滤器,则需要1秒钟来加载请求。但如果我一次更改5个过滤器,它会中止其中4个,只留下最后一个请求。但是,此请求最终需要5秒钟才能完成。

任何人都知道这是为什么?我猜测即使jQuery中止请求,我的服务器仍在处理它? (我在开发模式下运行本地Rails Mongrel,fyi)这有点打败了我放弃请求的全部原因......我能做些什么来解决这个问题?

非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

如果快速输入用户的搜索参数,您可能希望通过延迟请求来尝试一种方法。例如,在我的一个应用程序中,我等到用户停止半秒钟。

  $("#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);
    }
  });