Select2 JS 使用 Ajax 加载远程数据
Select2 JS Loading remote data with Ajax
我正在使用 Select2 JS 版本 4.0.0-rc.1,使用远程 Ajax 方法加载建议时遇到问题。
下面是标记和代码
<select class="form-control input-sm" id="selFrame1" name="selFrame1">
<option> Select Frame </option>
</select>
JavaScriptJquery
$('#selFrame1').select2({
ajax: {
url: siteUrl+"suggest/frames",
dataType: 'json',
delay: 250,
method:'POST',
data: function (params) {
return {
q: params.term, // search term
page: params.page
};
},
processResults: function (data, page) {
// parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to
// alter the remote JSON data
return {
results: data.result
};
},
cache: true
}
});
服务器返回的Json结果
{results: [{"Code":"123360000"},{"Code":"123360358"},{"Code":"123364000"},{"Code":"123400000"}], more: false }
我完全不确定是否需要编写特定函数来显示建议,Ajax 部分的评论说我们不应该更改结果 Json 数据。
现在有人请告诉我我还应该做什么才能使代码正常工作以显示建议。
我想新版本的 select2 已经改变了很多东西。
您的回复将作为 Select2 3.x 回复返回,这很好。为此,我们提供了 processResults
方法(以前是 results
),因此您可以在客户端修改响应。
在您的情况下,您的响应包含 results
键,但您的 processResponse
函数引用了不存在的 result
键。如果您将其更改为
processResults: function (data, page) {
// parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to
// alter the remote JSON data
return {
results: data.results,
pagination: {
more: data.more
}
};
},
然后事情应该开始工作了。这还将现有 more
属性 映射到我们在 Select2 4.0 中迁移到的新 pagination
键的响应。
您的 Json 回复必须是这样的:
{
"total_count":2,
"items": [
{"id":"01", "name":"item 1"},
{"id":"02", "name":"item 2"}
]
}
上班,你一个id 属性。
这是我的配置:
function formatRepo (repo) {
if (repo.loading) return repo.text;
var markup = "<div class='select2-result-repository clearfix'><div class='select2-result-repository__img'><img src='" + repo.img + "' width='80' height='80' /></div><div class='select2-result-repository__meta'><div class='select2-result-repository__title'>" + repo.full_name + "</div>";
markup += "<div class='select2-result-repository__statistics'><div class='select2-result-repository__type'><i class='fa fa-flash'></i> Type : " + repo.type + "</div><div class='select2-result-repository__usecase'><i class='fa fa-eye'></i> Use case : " + repo.usecase + "</div></div></div></div>";
return markup;
}
function formatRepoSelection (repo) {
return repo.full_name;
}
// Init select2
$(".select2").select2({
ajax: {
type : "GET",
url : "{{ path('tag_search_js') }}",
dataType: 'json',
delay : 250,
data : function (params) {
return {
q: params.term, // search term
page: params.page
};
},
processResults: function (data, params) {
params.page = params.page || 1;
return {
results: data.items,
pagination: {
more: (params.page * 30) < data.total_count
}
};
},
cache: true
},
placeholder: "Select a tag",
escapeMarkup: function (markup) { return markup; },
minimumInputLength: 1,
templateResult: formatRepo,
templateSelection: formatRepoSelection
});
希望对您有所帮助!
我正在使用 Select2 JS 版本 4.0.0-rc.1,使用远程 Ajax 方法加载建议时遇到问题。
下面是标记和代码
<select class="form-control input-sm" id="selFrame1" name="selFrame1">
<option> Select Frame </option>
</select>
JavaScriptJquery
$('#selFrame1').select2({
ajax: {
url: siteUrl+"suggest/frames",
dataType: 'json',
delay: 250,
method:'POST',
data: function (params) {
return {
q: params.term, // search term
page: params.page
};
},
processResults: function (data, page) {
// parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to
// alter the remote JSON data
return {
results: data.result
};
},
cache: true
}
});
服务器返回的Json结果
{results: [{"Code":"123360000"},{"Code":"123360358"},{"Code":"123364000"},{"Code":"123400000"}], more: false }
我完全不确定是否需要编写特定函数来显示建议,Ajax 部分的评论说我们不应该更改结果 Json 数据。
现在有人请告诉我我还应该做什么才能使代码正常工作以显示建议。
我想新版本的 select2 已经改变了很多东西。
您的回复将作为 Select2 3.x 回复返回,这很好。为此,我们提供了 processResults
方法(以前是 results
),因此您可以在客户端修改响应。
在您的情况下,您的响应包含 results
键,但您的 processResponse
函数引用了不存在的 result
键。如果您将其更改为
processResults: function (data, page) {
// parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to
// alter the remote JSON data
return {
results: data.results,
pagination: {
more: data.more
}
};
},
然后事情应该开始工作了。这还将现有 more
属性 映射到我们在 Select2 4.0 中迁移到的新 pagination
键的响应。
您的 Json 回复必须是这样的:
{
"total_count":2,
"items": [
{"id":"01", "name":"item 1"},
{"id":"02", "name":"item 2"}
]
}
上班,你一个id 属性。
这是我的配置:
function formatRepo (repo) {
if (repo.loading) return repo.text;
var markup = "<div class='select2-result-repository clearfix'><div class='select2-result-repository__img'><img src='" + repo.img + "' width='80' height='80' /></div><div class='select2-result-repository__meta'><div class='select2-result-repository__title'>" + repo.full_name + "</div>";
markup += "<div class='select2-result-repository__statistics'><div class='select2-result-repository__type'><i class='fa fa-flash'></i> Type : " + repo.type + "</div><div class='select2-result-repository__usecase'><i class='fa fa-eye'></i> Use case : " + repo.usecase + "</div></div></div></div>";
return markup;
}
function formatRepoSelection (repo) {
return repo.full_name;
}
// Init select2
$(".select2").select2({
ajax: {
type : "GET",
url : "{{ path('tag_search_js') }}",
dataType: 'json',
delay : 250,
data : function (params) {
return {
q: params.term, // search term
page: params.page
};
},
processResults: function (data, params) {
params.page = params.page || 1;
return {
results: data.items,
pagination: {
more: (params.page * 30) < data.total_count
}
};
},
cache: true
},
placeholder: "Select a tag",
escapeMarkup: function (markup) { return markup; },
minimumInputLength: 1,
templateResult: formatRepo,
templateSelection: formatRepoSelection
});
希望对您有所帮助!