选择错误-没有响应

Select2 errors - no response

本文关键字:响应 错误 选择      更新时间:2023-09-26

我使用Select2在我的页面上提供动态选择功能。

下面是代码:-
$("#Spon_Index").select2({
    placeholder: "Type to select a sponsor",
    minimumInputLength: 3,
    multiple: false,
    width: 400,
    ajax: {
        url: "../control/autocomplete_sponsor.aspx",
        data: function(term) {
            return term;
        },
        results: function(data, page) {
            alert(results);
            return {
                results: data
            }
        },
        formatResult: function(data) {
            return data.text;
        },
        formatSelection: function(data) {
            return data.id;
        },
        escapeMarkup: function(m) {
            return m;
        }
    }
});

使用Fiddler,我可以看到我从autocomplete_sponsor获得正确的返回。aspx,例子:-

[{"id":"12","text":"Smiths"},{"id":"118","text":"Dr Smiths"}]

然而,控件没有发生任何事情。它要么挂在"搜索"上,要么什么都不挂……我已经检查了开发人员工具,有一个错误:-

Uncaught TypeError: Cannot read property 'slice' of undefined

我已经看了一些其他的解决方案,并尝试了各种重构我的代码,以得到这个工作,但我现在已经正式跑出的想法....

Select2似乎只是需要一个Javascript对象而不是JSON字符串。下面的代码是针对select2 v4.0.3的,因此resultsprocessResults取代。

$("#Spon_Index").select2({
    placeholder: "Type to select a sponsor",
    minimumInputLength: 3,
    multiple: false,
    width: 400,
    ajax: {
        url: "../control/autocomplete_sponsor.aspx",
        data: function(term) {
            return term;
        },
        processResults: function(data, page) {
            return { results: JSON.parse(data) };
        },
    }
});

对于Uncaught TypeError: Cannot read property 'slice' of undefined错误,我删除了select2中的placeholder选项并将其设置为我的select输入。所以代码是:

$("#Spon_Index").select2({
    minimumInputLength: 3,
    multiple: false,
    width: 400,
    ajax: {
        url: "../control/autocomplete_sponsor.aspx",
        dataType: 'json',
        data: function(term) {
            return term;
        },
        results: function(data) {
            return {
                results: data
            }
        }
    }
});

我的情况下,当我得到这个错误,这是因为ajax被请求,即使我到了最后一页,通过纠正我的processResults函数返回more: false属性在最后一页解决:

 return {
          results: [some data from my API...],
          pagination: {
            more: false, // if all data has been returned
          },
        }

try delete

placeholder: "Type to select a sponsor",

我唯一及时的解决方案:https://github.com/select2/select2/issues/2950#issuecomment-70927064

…你没有返回一个带有results

键的对象

所以,如果你可以修改api(后端是你的),最简单的方法是像这样发送你的数据:

{
    results: [
        {
            id: 5,
            text: 'something'
        },
        {
            ...
        }
    ]
}

…无论如何转换你的数据在js方面,基于此:https://select2.org/data-sources/ajax transforming-response-data

…然而@Kevin Dimey的答案与processResults选项不适合我(没有其他的答案)

删除占位符为我解决了这个问题