我的JSON响应数据不包含ID字段,Select2需要该字段才能显示结果。在文档中,它们提供了生成id的方法,但是,我无法这样做。有人可以提供一个如何做到这一点的例子吗?到目前为止我试过这个:
$('.itemSearch').select2(
ajax: {
type: "POST",
url: '/Default.aspx/TestMethod',
data: function(params){
var query={
message:params.term
}
return JSON.stringify(query);
},
processResults: function (data) {
var data1 = $.map(data, function (obj) {
obj.id = obj.id || obj.ItemNumber; // replace pk with your identifier
return obj;
});
return {
results: data.items,
};
}
}
});
答案 0 :(得分:1)
这是一个正确的代码段,使用index
函数中的map
作为 Select2 的ID:
var data = [{
"text": "Test item no. 1"
},
{
"text": "Test item no. 2"
},
{
"text": "Test item no. 3"
},
{
"text": "Test item no. 4"
}
];
$('.itemSearch').select2({
ajax: {
type: "POST",
url: '/echo/json/',
data: function(params) {
var query = {
message: params.term,
data: data
}
return {
json: JSON.stringify(query)
}
},
processResults: function(data) {
var data1 = $.map(data.data, function(obj, idx) {
obj.id = obj.id || idx;
return obj;
});
return {
results: data1,
};
}
}
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" />
<select id="myselect2" class="itemSearch" data-placeholder="click to load..." style="width:200px">
</select>
&#13;
这里有一个工作小提琴:https://jsfiddle.net/beaver71/7rqg3rck/
<强> P.S:强>
SO上的代码片段不起作用,因为存在Ajax调用。
相反,Jsfiddle使用户能够模拟这些Ajax调用,但在示例中数据被发送(通过POST)到&#34; / echo / json /&#34;服务并反映为同一个Ajax请求的结果。