jQuery Keyup Ajax 请求 : Kill previous requests

标签 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();
  });
});

最佳答案

这个问题已经在 ultimate-uber-authoritative thread here 中得到了解答。 .

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

如果您要发送 keyup 事件,您可能还会考虑添加延迟;这将给您的服务器带来相当大的负载,因此在开始事件之前请等待笔画之间的几秒钟的暂停。

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

我在进行 ajax 建议查找时遇到了同样的问题;)

关于jQuery Keyup Ajax 请求 : Kill previous requests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8072698/

相关文章:

jquery - tinyscrollbar.js 的键盘控制

javascript - 是否可以忽略 keyCode = 229 的按键事件?

javascript - 根据单选按钮动态更新选择

c# - KeyDown 事件不是从网格中引发的

javascript - 如何在渲染前设置 HTML select 元素的选定项?

php - 第一个 JQuery 项目...有点卡住

c# - Keyboard.GetKeyStates 误报,我如何真正知道是否按下了某个键?

Python 文档和/或缺乏(例如键盘 event.state)

javascript - 如何使用 jQuery 制作一个简单的 mouseon 弹出工具提示?

javascript - 页面滚动后,Android 上的 Bootstrap 弹出窗口消失