Минимальная длина автозаполнения jQuery не работает после первого поиска

#javascript #jquery

Вопрос:

Я реализую автозаполнение jquery с несколькими вариантами выбора. Я нажимаю несколько запросов get и один source внутри автозаполнения. Минимальный срок срабатывает только в первый раз. Как только я выбираю первый вариант и снова набираю символ, минимальная длина не работает. Ниже приведена моя функция:

 function search() {
    var $id = "#email";
    jQuery.ajax({
        url: url,
        type: "GET",
        beforeSend: function(xhr) {
            xhr.setRequestHeader('Content-Type', 'application/json');
            xhr.setRequestHeader('CSRF_NONCE', 'Fetch');
        },
        success: function(res, status, responseHeader) {
            jQuery.ajax({
                url: url,
                type: 'GET',
                beforeSend: function(xhr) {
                    xhr.setRequestHeader('Content-Type', 'application/json');
                    xhr.setRequestHeader('CSRF_NONCE', responseHeader.getResponseHeader("CSRF_NONCE"));
                },
                success: function(data) {
                    jQuery($id).autocomplete({
                        minLength: 3,
                        source: function(request, response) {
                            jQuery.ajax({
                                url: url,
                                success: function(data) {
                                    var parsedPayload = JSON.parse(data.payload);
                                    data = parsedPayload;
                                    response(jQuery.map(data, function(item) {
                                        return {
                                            label: item.label,
                                            value: item.value
                                        }
                                    }));
                                }
                            });
                        },
                        focus: function() {
                            return false;
                        },
                        select: function(event, ui) {
                            var terms = split(this.value);
                            terms.pop();
                            terms.push(ui.item.value);
                            terms.push("");
                            this.value = terms.join(" ");
                            return false;
                        },
                        change: function(event, ui) {
                            console.log("Current value is: ", removeLast(this.value));
                            jQuery(this).val((ui.item ? ui.item.id : removeLast(this.value)));
                        }
                        });
                    },
                    error: function(data) {
                        console.log("Failed", data)
                    }
                });
            },
            error: function() {
                console.log("Failed")
            }
    });
}

function split(val) {
    return val.split(/s /);
}

function extractLast(term) {
    return split(term).pop();
}

function removeLast(term) {
    var t = split(term);
    t.pop();
    return t;
}
 

Я выполняю несколько запросов, особенно в следующем блоке:

         success: function(data) {
            jQuery($id).autocomplete({
                minLength: 3,
                source: function(request, response) {
                    jQuery.ajax({
                        url: url,
                        success: function(data) {
                            var parsedPayload = JSON.parse(data.payload);
                            data = parsedPayload;
                            response(jQuery.map(data, function(item) {
                                return {
                                    label: item.label,
                                    value: item.value
                                }
                            }));
                        }
                    });
                },
                focus: function() {
                    return false;
                },
                select: function(event, ui) {
                    var terms = split(this.value);
                    terms.pop();
                    terms.push(ui.item.value);
                    terms.push("");
                    this.value = terms.join(" ");
                    return false;
                },
                change: function(event, ui) {
                    console.log("Current value is: ", removeLast(this.value));
                    jQuery(this).val((ui.item ? ui.item.id : removeLast(this.value)));
                }
                });
            },
 

Заранее спасибо.