Bootstrap 多选和 $.ajax GET 嵌套对象
Bootstrap Multiselect and $.ajax GET with nested objects
我正在努力 $.ajax GET 嵌套对象并将数据动态发送到 Bootstrap Multiselect 下拉菜单 select 选项。相近 ..
Issue with Data returning from AJAX call showing up in Bootstrap Multiselect dropdown
更具体地说,我想从 data.php 中多重 select 对象 "company"(使用数据表编辑器):
{"data":[{"DT_RowId":"row_1","company":"FirstCompany","webtechnology":"Contao",...},
{"DT_RowId":"row_2","company":"SecondCompany","webtechnology":"Wordpress",...},
{"DT_RowId":"row_3","company":"ThirdCompany","webtechnology":"Custom",...},
{"DT_RowId":"row_4","company":"FourthCompany","webtechnology":"TYPO3 CMS",...}],"options":[],"files":[]}
每个公司都存在多次,大约有 1000 行。
这是我当前的设置:
<html>
<select class="select-ajax form-control" placeholder="Entity Status" multiple="multiple"></select>
</html>
<script>
var company;
$(document).ready(function() {
$('.select-ajax').multiselect({
maxHeight: 400,
buttonWidth: '100%',
includeSelectAllOption: true,
enableFiltering: true
});
$.ajax({
type: 'GET',
url: '/data.php',
dataType: 'json',
success: function(data) {
$.each(data, function (i, item) {
company = item.company;
$('.select-ajax').append('<option value="' + item.company + '">' + item.company + '</option>');
console.log(item)
});
$('.select-ajax').multiselect('rebuild');
},
error: function() {
alert('error loading items');
}
});
$('.select-ajax').trigger( 'change' );
});
</script>
console.log() 显示以下输出:
[Object { DT_RowId="row_1", company="FirstCompany", webtechnology:"Contao", more...},
Object { DT_RowId="row_2", company="SecondCompany", webtechnology:"Wordpress", more...},
Object { DT_RowId="row_3", company="ThirdCompany", webtechnology:"Custom", more...},
Object { DT_RowId="row_4", company="FourthCompany", webtechnology:"TYPO3 CMS", more...}, 46 more...]
变量 "data" 具有完整的 ajax 响应 {"data":[.........]}。
我们需要在响应中迭代 "data" 键中的值。因此需要在响应中放置指向实际 JSON 数组的 "data.data" 以填充下拉列表
内部成功处理程序尝试更改
$.each(data, function (i, item)
to
$.each(data.data, function (i, item)
为避免重复条目,您需要在将数据推送到下拉列表之前添加检查。所以最后成功处理程序中的代码应该如下所示。
$.each(data.data, function (i, item) {
company = item.company;
if($(".select-ajax option[value='"+item.company+"']").length == 0){
$('.select-ajax').append('<option value="' + item.company + '">' + item.company + '</option>');
}
});
我正在努力 $.ajax GET 嵌套对象并将数据动态发送到 Bootstrap Multiselect 下拉菜单 select 选项。相近 ..
Issue with Data returning from AJAX call showing up in Bootstrap Multiselect dropdown
更具体地说,我想从 data.php 中多重 select 对象 "company"(使用数据表编辑器):
{"data":[{"DT_RowId":"row_1","company":"FirstCompany","webtechnology":"Contao",...},
{"DT_RowId":"row_2","company":"SecondCompany","webtechnology":"Wordpress",...},
{"DT_RowId":"row_3","company":"ThirdCompany","webtechnology":"Custom",...},
{"DT_RowId":"row_4","company":"FourthCompany","webtechnology":"TYPO3 CMS",...}],"options":[],"files":[]}
每个公司都存在多次,大约有 1000 行。
这是我当前的设置:
<html>
<select class="select-ajax form-control" placeholder="Entity Status" multiple="multiple"></select>
</html>
<script>
var company;
$(document).ready(function() {
$('.select-ajax').multiselect({
maxHeight: 400,
buttonWidth: '100%',
includeSelectAllOption: true,
enableFiltering: true
});
$.ajax({
type: 'GET',
url: '/data.php',
dataType: 'json',
success: function(data) {
$.each(data, function (i, item) {
company = item.company;
$('.select-ajax').append('<option value="' + item.company + '">' + item.company + '</option>');
console.log(item)
});
$('.select-ajax').multiselect('rebuild');
},
error: function() {
alert('error loading items');
}
});
$('.select-ajax').trigger( 'change' );
});
</script>
console.log() 显示以下输出:
[Object { DT_RowId="row_1", company="FirstCompany", webtechnology:"Contao", more...},
Object { DT_RowId="row_2", company="SecondCompany", webtechnology:"Wordpress", more...},
Object { DT_RowId="row_3", company="ThirdCompany", webtechnology:"Custom", more...},
Object { DT_RowId="row_4", company="FourthCompany", webtechnology:"TYPO3 CMS", more...}, 46 more...]
变量 "data" 具有完整的 ajax 响应 {"data":[.........]}。 我们需要在响应中迭代 "data" 键中的值。因此需要在响应中放置指向实际 JSON 数组的 "data.data" 以填充下拉列表 内部成功处理程序尝试更改
$.each(data, function (i, item)
to
$.each(data.data, function (i, item)
为避免重复条目,您需要在将数据推送到下拉列表之前添加检查。所以最后成功处理程序中的代码应该如下所示。
$.each(data.data, function (i, item) {
company = item.company;
if($(".select-ajax option[value='"+item.company+"']").length == 0){
$('.select-ajax').append('<option value="' + item.company + '">' + item.company + '</option>');
}
});