select2-4.0.3 将值显示为 JSON 数据中的键

select2-4.0.3 displaying values as keys in JSON data

我有来自服务器的 JSON 数据。根据 JASONlint

,这是有效的 JSON

问题是当我输入 3 位数字(任何虚假的)时,我得到了下拉列表,它显示 "keys" 作为值!!!我不知道为什么它是相反的顺序???如果我使用 .each 代替 .map 它正确地将值列为值(在控制台日志中),但随后在下拉列表中不显示任何内容(报告了 select2 js 中的一些错误)。

JSON: (firebug)

{"4":"2013","3":"2014","1":"2016","6":"winter","7":"birthday","2":"2015","5":"summer","8":"vacation"
}

这是我的 JS:

$("#selectTags").select2({
    tags: true,
    multiple: true,
    allowClear: true,
    //closeOnSelect: false,
    tokenSeparators: ',',       //  [' ',','],
    minimumInputLength: 3,
    ajax: {
        url: "/cgi-bin/json-data.pl",
        dataType: 'json',
        delay: 100,
        data: function (params) {
            var queryParameters = {
                term: params.term
            }
            return queryParameters;
        },
        processResults: function (data) {
            return {
                results: $.map(data, function (key,value) {
                    console.log('key='+key);
                    return {
                        id: key,
                        text: value
                    }
                })
            };
        }
    }
});

问题出在 map,您混淆了参数,第一个是值,第二个是键。 见 http://api.jquery.com/jQuery.map/#jQuery-map-object-callback

    processResults: function (data) {
        return {
            results: $.map(data, function (value, key) {
                console.log('key='+key);
                return {
                    id: key,
                    text: value
                }
            })
        };
    }