停止 Ajax 个? (自动完成多个值)

Stop Ajax if ? (Autcomplete with multiple values)

因此,我正在使用 jQuery 编写一个非常简单的自动完成脚本,该脚本具有多个值(用逗号分隔)。 如果最后一个标签长度 > 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);

但是...

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

如果用户在之后快速输入昏迷,我怎么能中止之前的请求,所以,如果 last_tag 长度 <=1?

我觉得我将不得不为此重新考虑整个事情。没有快速修复方法吗? 我有点迷茫和疲倦。

有什么帮助吗?

我建议你 disable 元素一 Ajax 开始,enable 它一旦完成,使用 .prop(), another way is for sure to throttle/debounce Ajax 调用(不确定如果该插件适用于 jQuery 3):

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);