jQuery:如何为ajax请求添加延迟?

sf_*_*anb 1 ajax jquery

我有一个函数,它返回在敲击时在AJAX中触发的一定数量的数据.

但是,只要我输入"hello my name is"这样的"long"字符串,就会在每次键入一个键时启动一个请求(单次请求10次,获得1个请求响应需要5秒).

请问如何避免?(我不想使用.onblur)

$(document).ready(function()
    {
      $('.search input[type="submit"]').hide();

      $('#search_keywords').keyup(function(key)
      {
        if (this.value.length >= 2 || this.value == '')
        {
          $('#loader').show();
          $('#jobs').load(
            $(this).parents('form').attr('action'),
            { query: this.value + '*' },
            function() { $('#loader').hide(); }
          );
        }
      });
    });
Run Code Online (Sandbox Code Playgroud)

谢谢 ;)

Nic*_*ver 5

我倾向于在该keyup事件上设置一个计时器,如下所示:

$('#search_keywords').keyup(function() {
  clearTimeout($.data(this, 'timer'));
  $(this).data('timer', setTimeout($.proxy(search, this), 500));
});
function search()  {
  if (this.value.length >= 2 || this.value == '') {
    $('#loader').show();
    $('#jobs').load(
      $(this).parents('form').attr('action'),
      { query: this.value + '*' },
      function() { $('#loader').hide(); }
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

这会将您的搜索分成另一个功能,我们只是在敲击一个键并触发该搜索功能之间延迟500毫秒.如果你键入另一个字母,500ms计时器会重置clearInterval(),所以快速键入不会触发20个事件,只有一旦你暂停半秒钟就会触发它.该$.proxy()部分是执行this时正确的setTimeout().