我有一个搜索过滤器,它会在更改过滤器时触发 ajax 请求来更新结果集。用户经常会一次性更改许多过滤器,从而引发许多 AJAX 请求。
因此,我决定在发出新请求时中止先前的请求(通过使用 ajax.abort() 函数)。现在... Firebug 将所有这些请求显示为已中止,但最后一个请求(唯一未中止的请求)花费的时间越长,前面中止的请求就越多。
例如,如果我只更改一个过滤器,则加载请求将需要 1 秒。但是,如果我一次性更改 5 个过滤器,它会中止其中 4 个,只留下最后一个请求。但是,此请求最终需要 5 秒才能完成。
有谁知道这是为什么吗?我猜即使 jQuery 中止了请求,我的服务器仍然会处理它? (我正在开发模式下运行本地 Rails Mongrel,仅供引用)这有点违背了我中止请求的全部原因......我能做些什么来解决这个问题?
非常感谢您的帮助!
最佳答案
如果用户的搜索参数输入速度很快,您可能需要尝试延迟请求的方法。例如,在我的一个应用程序中,我会等到用户停止半秒。
$("#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);
}
});
关于ruby-on-rails - 即使所有先前的请求都中止,jQuery AJAX 请求仍很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485725/