$.map() 在 .autocomplete() 成功中多次触发

$.map() is firing multiple times inside of an .autocomplete() success

我正在使用 jQuery UI 中的 "autocomplete" 函数在数据库中搜索用户。脚本正在运行,程序正在寻找我要找的一切。但是当自动完成菜单出现在搜索字段下方时,所有结果都会出现多次。查找问题后,我可以找到有问题的功能。是map()。也许有人可以帮我解决这个问题。谢谢你!

函数:

<!-- Dynamische Suche -->
    $('#suchfeld').autocomplete({
        source : function (request, response) {
            $.ajax({
                type: "POST",
                url: "post.php",
                data: {
                    name:'Suchfeldvorschlaege',
                    value:request.term
                },
                success: function(json) {
                    var data = $.parseJSON(json);
                    var availableTagsLabeled = new Array();
                    response($.map(data, function () {
                        if(!data["0_SuchfeldName"]) {
                            availableTagsLabeled[0] = {label:"Keine Einträge"};
                        } else {
                            for(i = 0; i <= data.SuchfeldAnzahl; i++) {
                                availableTagsLabeled[i] = {label: data[i +"_SuchfeldName"], value: data[i +"_SuchfeldID"]};
                            }
                        }
                        return availableTagsLabeled;
                    }));
                }
            })
        },
        minLength : 3,
        select : function(event, ui) {
            $('#suchfeld').html(ui.item.label);
            $('#suchfeld').attr("data-KundenID", ui.item.value);
            return false; },
        focus : function(event, ui) {
            $(this).val(ui.item.label);
            $('#suchfeld').attr("data-KundenID", ui.item.value);
        }
    });`

(我所有的功能都在 $(document).ready(function(){}); 内)

$.map() returns 由回调函数 return 编辑的所有值的数组。您的回调函数是 returning 整个 availableTagsLabeled 数组,因此 $.map() 是 returning 二维数组。您应该一次 return 一个元素。

但看起来您根本不应该在 JSON 对象上进行映射。您只需要 for 循环来收集所有元素。

并且您对 return 是否有任何元素的测试应该在循环之外完成。

success: function(json) {
    var var data = $.parseJSON(json);
    var availableTagsLabeled;
    if(!data["0_SuchfeldName"]) {
        availableTagsLabeled = [{label:"Keine Einträge"}];
    } else {
        availableTagsLabeled = [];
        for(i = 0; i <= data.SuchfeldAnzahl; i++) {
            availableTagsLabeled[i] = {label: data[i +"_SuchfeldName"], value: data[i +"_SuchfeldID"]};
        }
    }
    response(availableTagsLabeled);
}