选择 2 AJAX 标签

Select2 AJAX Tags

我有以下 JSON,通过 /tags 检索:

[
    {
        "id": "CSS",
        "text": "CSS"
    },
    {
        "id": "HTML",
        "text": "HTML"
    },
    {
        "id": "JavaScript",
        "text": "JavaScript"
    },
    {
        "id": "jQuery",
        "text": "jQuery"
    },
    {
        "id": "MySQL",
        "text": "MySQL"
    },
    {
        "id": "PHP",
        "text": "PHP"
    }
]

我有一个 <input /> 可以通过使用 Select2:

接受标签
<input name="Tags" id="Tags" value="PHP,HTML,jQuery" />

并且我以这种方式附加了 Select2:

$("#Tags").select2({
    tags: true,
    tokenSeparators: [",", " "],
    createSearchChoice: function(term, data) {
        if ($(data).filter(function() {
            return this.text.localeCompare(term) === 0;
        }).length === 0) {
            return {
                id: term,
                text: term
            };
        }
    },
    multiple: true,
    ajax: {
        url: '/tags',
        dataType: "json",
        data: function(term, page) {
            return {
                q: term
            };
        },
        results: function(data, page) {
            return {
                results: data
            };
        }
    }
});

问题

  1. 当我加载页面时,默认值消失了。
  2. Select2 向 /tags 发出请求,但它不会加载标签。

控制台也没有错误。我正在使用来自 CDN 的 Select2 3.5.2。我哪里错了?

嗯,我用过这个。看起来像是破解或解决方法。

$("#Tags").select2({
    tags: true,
    multiple: true
});
$.getJSON("/tags", function (data) {
    if (data.length > 0)
        $("#Tags").select2({
            tags: data,
            multiple: true
        });
});

希望这对某人有所帮助。在我得到更好的建议之前,我会一直保持这个状态。