jQuery Keyup Ajax请求:杀死以前的请求

时间:2011-11-09 22:31:57

标签: jquery keyboard-events

我有一个脚本在我的搜索输入框上的keyup事件上执行ajax请求。我在Firefox中注意到(我正在查看控制台)每个被发送的请求都会完成。因此,有大量的ajax请求发生。

无论如何都要在keyup事件中杀死正在进行的ajax请求吗?

jQuery的:

jQuery(function() {
  var request;
  request = function(url, keyword) {
    return $.post('/backpack/' + url + '/search?keyword=' + keyword, function(data) {
      var el;
      el = "#result_" + url;
      return $(el).html(data);
    });
  };
  $("#search_text").bind("keyup", function() {
    var query, url, _i, _len, _ref;
    query = $(this).val();
    if (query.length > 2) {
      _ref = ['tracks', 'albums', 'artists'];
      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
        url = _ref[_i];
        request(url, query);
      }
      return $("#search_suggestions").show();
    } else {
      return $("#search_suggestions").hide();
    }
  });
  return $("#suggestion_all_results").bind("click", function() {
    return $('#search_form form').submit();
  });
});

2 个答案:

答案 0 :(得分:4)

ultimate-uber-authoritative thread here已经回答了这个问题。

简答:它返回一个XHR对象,你可以调用abort()

如果您要发送keyup事件,您可能还会考虑添加延迟;这对你的服务器来说是一个非常大的负荷,所以等到笔画之间暂停几秒钟之后你才开始打扰这个事件。

正如Erv Walter在上述帖子的评论中所说:“值得注意的是,如果服务器已经收到请求,它可能会继续处理请求(取决于服务器的平台),即使浏览器不再监听没有可靠的方法让Web服务器在处理正在进行的请求时停止运行。“

我遇到了做ajax建议查找的相同问题;)

答案 1 :(得分:0)

您只需保存发送的每个请求的返回值,在添加新请求之前,只需先执行savedRequest.abort()