Javascript 选择2个错误-无响应

Javascript 选择2个错误-无响应,javascript,jquery,jquery-select2,Javascript,Jquery,Jquery Select2,我正在使用Select2在我的页面上提供动态选择功能 代码如下:- $("#Spon_Index").select2({ placeholder: "Type to select a sponsor", minimumInputLength: 3, multiple: false, width: 400, ajax: { url: "../control/autocomplete_sponsor.aspx", data: f

我正在使用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_sandor.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,因此
results
processResults
替换

$("#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) };
        },
    }
});

对于
uncaughttypeerror:无法读取未定义的
错误的属性“slice”,我删除了
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
            }
        }
    }
});
尝试删除

placeholder: "Type to select a sponsor",

我的情况是,当我遇到这个错误时,这是因为即使在我到达最后一页之后,仍有人请求ajax,通过更正我的
processResults
函数,在最后一页返回
more:false
属性,解决了这个问题:

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

对我而言,唯一且及时的解决方案:

。。。您没有返回包含关键结果的对象

因此,如果您可以修改api(后端是您的),最简单的方法是如下方式发回数据:

{
    results: [
        {
            id: 5,
            text: 'something'
        },
        {
            ...
        }
    ]
}
。。。无论如何,在js端转换您的数据,基于此:


。。。但是@Kevin Dimey的答案和
processResults
选项对我不起作用(答案中没有其他选项)

如果您可以包括该错误的回溯,它可能提供了一些关于问题所在的见解。只需删除select2中的
占位符
选项,并将其添加到您的选择输入。这与angela.mirjalili去年的评论中所述的相同。如果我想显示占位符呢?您可以在您的选择输入中设置它,而不是在jQuery代码中<代码>
我在react中使用它,这意味着我没有HTML标记,只有一个组件。