Jquery 如果需要停止Ajax?(包含多个值)

Jquery 如果需要停止Ajax?(包含多个值),jquery,ajax,autocomplete,Jquery,Ajax,Autocomplete,因此,我正在使用jQuery编写一个非常简单的自动完成脚本,其中包含多个值(用coma分隔)。 如果最后一个标记长度>1,则建议开始,否则不应触发并删除任何建议 代码如下: function show_tags () { var tags = jQuery( this ).val(); var last_tag= getLast(tags); if (last_tag.length>1) {

因此,我正在使用jQuery编写一个非常简单的自动完成脚本,其中包含多个值(用coma分隔)。 如果最后一个标记长度>1,则建议开始,否则不应触发并删除任何建议

代码如下:

function show_tags () {
            var tags = jQuery( this ).val();
            var last_tag= getLast(tags);

            if (last_tag.length>1) {

                jQuery.ajax({
                  url: ajaxurl,
                  type: "POST",
                  data: {
                    'action': 'suggest_tags',
                    't': tags
                  }
                }).done(function(response) {
                    jQuery('.suggestions').html(response);
                });
            }
            else {
                jQuery('.suggestions').html('');
            }
        }

jQuery( ".search-field" ).on( "keyup", show_tags);
但是

我发现这可能不是最好的方法,因为如果有人打字太快,那么在前面的ajax请求完成之前就会触发else部分


如果用户在之后很快输入了coma,那么我如何中止之前的请求呢?因此,如果最后一个标记长度我建议您
禁用
Ajax开始的元素,并
启用
一旦完成,使用另一种方法是确定Ajax调用(但不确定该插件是否适用于jquery3):


嗯,我考虑过,但我不确定这种解决方案是否值得解决这种问题。因为它会破坏(对我来说)用户体验,当这里它只是显示标签建议有点太长,在另一个字符输入之前。如果你明白我的意思。@bobbrown,这就是我建议节流/去盎司的原因,在我看来这是最好的方法,请检查以下内容:是的,很抱歉,我用你的第一个解决方案进行了测试,没有看到编辑,然后回答(同样在第一个解决方案中,只有在(last_tag.length>1)的情况下,你可能想要禁用输入),以防万一有人发现这个)。我不熟悉油门/去盎司,我要看一下。ThanksIt应该适合您,是的,它限制了Ajax调用这将防止发生太多用户不想要结果的Ajax调用,因为这有助于减少服务器负载,关于逗号,我认为这是您已经考虑到的,通过确保在Ajax调用发生之前正确分割您的输入。我确实尝试过,而且效果很好,我不得不说。。。唯一的缺点是它增加了另一个依赖项,这是我一直试图避免的(这就是为什么我没有尝试jqueryui自动完成)。但是是的,它很轻。。。它也有助于服务器负载。。。所以好的你说得对!;)。我仍然会等待,看看是否有其他人有其他的建议,但我会暂时保留这个,尽管我认为可能没有更好的解决方案。无论如何,非常感谢!**在接受答案之前,我会给一两天时间。
function show_tags () {
    var textInput = jQuery( this );
    var tags = jQuery( this ).val();

    var last_tag= getLast(tags);

    if (last_tag.length>1) {
        textInput.prop( "disabled", true );
        jQuery.ajax({
          url: ajaxurl,
          type: "POST",
          data: {
            'action': 'suggest_tags',
            't': tags
          }
        }).done(function(response) {
            jQuery('.suggestions').html(response);
            textInput.prop( "disabled", false );
        });
    }
    else {
        jQuery('.suggestions').html('');
    }
}

jQuery( ".search-field" ).on( "keyup", show_tags);