select2结果来自服务器不显示

时间:2016-10-30 21:52:41

标签: jquery select2 jquery-select2-4

我正在使用Select2 4.0.3尝试从我的服务器返回的json在我的下拉列表中显示为选项,但是当我打开下拉列表或在字段中搜索时,结果根本不显示。

<body>
    <select class="select2-student form-control">
    </select>
</body>

<script>
    $(document).ready(function () {
        $(".select2-student").select2({
            ajax: {
                url: "/MyUrl",
                data: function (params) {
                    return {
                        text: params.term
                    };
                },
                processResults: function (data, params) {
                    return {
                        results: data
                    };
                }
            }
        });
    });
</script>

当我输入匹配的文本时,我正在按预期从服务器返回响应:

[{"Text":"My Student","Id":3}]

当我输入一个与服务器端标准不匹配的字符串(即与“text”字段中的内容不匹配)时,我在下拉列表中找到“未找到结果”,但是当结果返回那里甚至没有掉落任何内容 - 我在浏览器中没有收到任何错误。

我已经整天尝试了这些代码的一些变体,并且还没有得到任何工作。建议?

2 个答案:

答案 0 :(得分:0)

对于遇到相同问题的任何人的更新:我在发布后不久发现了这里发生了什么 - 从服务器返回的JSON不是驼峰式的,所以Select2没有正确读取它。正确的格式应该是:

[{"text":"My Student","id":3}]

回想起来这么愚蠢,但是看起来ASP.NET默认情况下不会以这种方式格式化。我开始使用this question中的JsonCamelCaseResult类,并且一直运行良好。

答案 1 :(得分:0)

我知道这是一个很老的问题,但更好的方法是做这样的事情:

            processResults: function(data) {
                return {
                    results: jQuery.map(data, function(item) {
                        return {
                            id: item.key,
                            text: item.value
                        }
                    })
                };
            },

这样你就可以返回标准的映射对象集合,而不必担心任何外壳。