提问人:user351479 提问时间:10/26/2023 最后编辑:Philuser351479 更新时间:10/26/2023 访问量:42
将 select2 ajax 结果显示到模板中
Display select2 ajax results into template
问:
我有 select2 在进行 ajax 调用后显示数据。
<script>
$(document).ready(function () {
$("#citySelect").select2({
theme: 'bootstrap-5',
placeholder: "Search for your city",
dropdownAutoWidth: true,
width: 'auto',
minimumInputLength: 3,
allowClear: true,
async: true,
ajax: {
url:
function (params) {
return '@GatewaySettings.Value.Url' + '/api/location/cities/' + params.term;
},
contentType: "application/json; charset=utf-8",
type: 'GET',
processResults: function (result) {
return {
results: $.map(result, function (item) {
return { id: item.id, text: item.city };
}),
};
}
}
});
});
</script>
我可以搜索城市列表
我希望活动搜索结果显示为城市 + '、' + 州 + ' ' + zip(即加利福尼亚州洛杉矶 90001),选择后仅显示城市(即洛杉矶)。
我正在尝试遵循文档,但我不断得到一个未定义的结果。
我敢肯定我只是不明白如何使用模板。
<script>
$(document).ready(function () {
$("#citySelect").select2({
theme: 'bootstrap-5',
placeholder: "Search for your city",
dropdownAutoWidth: true,
width: 'auto',
minimumInputLength: 3,
allowClear: true,
async: true,
templateResult: function (item) {
console.log(item);
return item.city + ', ' + item.state + ' ' + item.zip;
},
templateSelection: function (item) {
return item.city
},
ajax: {
url:
function (params) {
return '@GatewaySettings.Value.Url' + '/api/location/cities/' + params.term;
},
contentType: "application/json; charset=utf-8",
type: 'GET',
cache: true,
processResults: function (result) {
return {
results: $.map(result, function (item) {
return { id: item.id, text: item.city };
}),
};
}
}
});
});
</script>
任何帮助不胜感激
添加后控制台的结果
console.log("RESULTS", JSON.stringify(result, null, 2));
RESULTS [
{
"id": 5039,
"city": "Chandlers Valley",
"state": "Pennsylvania",
"zip": null
},
{
"id": 14327,
"city": "Chandlersville",
"state": "Ohio",
"zip": null
},
{
"id": 15915,
"city": "Chandler",
"state": "Indiana",
"zip": null
},
{
"id": 19293,
"city": "Chandler",
"state": "Minnesota",
"zip": null
},
{
"id": 22001,
"city": "Chandlerville",
"state": "Illinois",
"zip": null
},
{
"id": 26294,
"city": "Chandler",
"state": "Oklahoma",
"zip": null
},
{
"id": 26686,
"city": "Chandler",
"state": "Texas",
"zip": null
},
{
"id": 29715,
"city": "Chandler",
"state": "Arizona",
"zip": null
},
{
"id": 29716,
"city": "Chandler",
"state": "Arizona",
"zip": null
},
{
"id": 29717,
"city": "Chandler",
"state": "Arizona",
"zip": null
}
]
答:
1赞
Phil
10/26/2023
#1
你的在很大程度上是多余的,也排除了你似乎想要使用的属性。$.map()
您真正需要做的就是将数组嵌套在一个属性下,以便 Select2 可以使用它。results
templateResult: ({ city, state, zip }) =>
`${city}, ${state} ${zip ?? ""}`.trim(),
templateSelection: ({ city }) => city,
ajax: {
url: ({ term }) =>
"@GatewaySettings.Value.Url" +
`/api/location/cities/${encodeURIComponent(term)}`, // encode the term
processResults: (results) => ({ results }),
}
关于属性的一些说明...ajax
- 默认方法(类型)为
GET
- 默认属性为
cache
true
- GET 请求没有内容,因此不需要
contentType
评论
1赞
user351479
10/26/2023
做到了。非常感谢。我将我的一个查询从 dapper 更改为别名 ZipCode 再到 Zip,现在它可以工作了!我明天会回顾你所做的事情,以便我能够继续学习
评论
processResults
data
data.items