我有一个搜索过滤器,可以在更改过滤器时触发ajax请求以更新结果集。通常情况下,用户将一次性更改许多过滤器,从而触发许多AJAX请求。
所以我决定中止先前的请求(如果是新的请求)(通过使用ajax.abort()函数)。现在...... Firebug将所有这些请求显示为已中止,但最后一个请求(唯一一个未中止的请求)需要越来越长的请求。
因此,例如,如果我只更改一个过滤器,则需要1秒钟来加载请求。但如果我一次更改5个过滤器,它会中止其中4个,只留下最后一个请求。但是,此请求最终需要5秒钟才能完成。
任何人都知道这是为什么?我猜测即使jQuery中止请求,我的服务器仍在处理它? (我在开发模式下运行本地Rails Mongrel,fyi)这有点打败了我放弃请求的全部原因......我能做些什么来解决这个问题?
非常感谢帮助!
答案 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);
}
});