【问题标题】:Stopping unfinished Ajax requests using jQuery使用 jQuery 停止未完成的 Ajax 请求
【发布时间】:2010-09-13 05:50:33
【问题描述】:

我正在我的网站 (rails) 上实现实时搜索功能。每次有按键时,我都会提交表单。但如果用户键入多个字符,则会向服务器发送多个搜索请求。我想知道是否有办法停止以前的(未处理的)请求。我只想成功处理最后一个请求。

我知道有一个 abort() 方法可以中止一个 ajax 请求,但是我不再控制之前的请求,所以我不能调用 abort。也许我在这里做错了什么。

有人吗?

谢谢

普尼特

【问题讨论】:

  • 要“取消”一个请求,只需停止监听/处理那个特定的请求响应;有几种方法可以做到这一点,包括仅使用带有标签的“运行”回调或显式管理“有效”回调等。但是,要获得更好的答案,请参阅 SimpleCoder 的回复。

标签: jquery ruby-on-rails


【解决方案1】:

没有办法使用 jQuery 停止 Ajax 请求。 处理这种事情的更好方法是“去抖动”事件:http://benalman.com/code/projects/jquery-dotimeout/examples/debouncing/(尝试第一个示例)。这样事件就不会在每次按键时触发;就在用户短暂停留的时候。否则,您最终会收到很多请求。

不过有办法:

var lastRequest;
$("input").keypress(function(){
    if (lastRequest){
        lastRequest.abort();
        lastRequest = null;
    }
    lastRequest = $.ajax({type: "POST", url: "some.php", data: "your=data&goes=here"});
});

发件人:Abort Ajax requests using jQuery

引导说明:lastRequest”听起来很邪恶。

【讨论】:

  • 呵呵。感谢您的快速回复。你的回答很有道理。我确实看过去抖动库。它按预期工作:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 2018-03-20
相关资源
最近更新 更多