select2:使用ajax获取json时“text is undefined”

时间:2014-01-16 11:15:58

标签: javascript jquery ajax json jquery-select2

将json结果返回到select2时遇到问题。我的json不返回具有“text”字段的结果,因此需要格式化结果,以便select2接受“Name”。

如果json中的文本字段设置为“text”,则此代码有效,但在这种情况下,我无法更改json结果的格式(我的控件之外的代码)。

$("#e1").select2({                                
    formatNoMatches: function(term) {return term +" does not match any items." },
    ajax: { // instead of writing the function to execute the request we use Select2's convenient helper
    url: "localhost:1111/Items.json",
    dataType: 'jsonp',
    cache: true,
    quietMillis: 200,
    data: function (term, page) {
            return {
                q: term, // search term
                p: page,
                s: 15               
            };
        },
    results: function (data, page) { // parse the results into the format expected by Select2.          
        var numPages = Math.ceil(data.total / 15);                
        return {results: data.Data, numPages: numPages};
        }
    }      
});

我查看了文档并找到了一些可以添加到结果中的语句,例如

text: 'Name',

但我仍然得到“文字未定义”。

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

请注意,select2始终位于{id,text}对中,因此您需要同时指定

results: function (data, page) {
            var newData = [];
            _.each(data, function (item) {
                newData.push({
                    id: item.Id  //id part present in data 
                  , text: item.DisplayString  //string to be displayed
                });
            });
            return { results: newData };
        }
    },

答案 1 :(得分:0)

感谢@neel shah解决我的问题。我只有一点问题,我不想使用额外的库,所以这就是为什么我改为普通的jquery。 所以,如果想要正常的jquery或javascript。

results: function (data, page) {
 var newData = [];
    $.each(data, function (index,value) {
        newData.push({
            id: value.Id,  //id part present in data
            text: value.DisplayString  //string to be displayed
        });
    });
}

OR

results: function (data, page) {
   var newData = [];
    for ( var i = 0; i < data.length; i++ ) {
        newData.push({
            id: data[i].Id,  //id part present in data
            text: data[i].DisplayString  //string to be displayed
        });
}

所有学分都归neel shah所有。再次感谢。