У меня есть вызов Ajax, возвращающий массив из silverstripe-function.javascript fill optogrouped dropdown
{
"null":"-- Person/choose Email --",
"System":{
"default":"[email protected]"},
"Office":{
"21":"[email protected]",
"22":"[email protected]",
"23":"[email protected]",
"24":"[email protected]"
},
"Workshop":{
"22":"[email protected]"
}
}
Я пытаюсь заполнить вариант - сгруппированный - выпадающий список без успеха.
$.ajax({
url: "StringImage_Ajax/dropdownSource",
type: "POST",
dataType: "json",
async:false
}).done(function(data){
dddata = JSON.stringify(data.string);
console.log('data = ' + dddata);
var dropdown = $('#StringEmail');
/*$.each(dddata, function (key, cat) {
console.log(key + ' _ ' + cat);
var group = $('<optgroup>',{label:key});
$.each(cat,function(i,item) {
$("<option/>",{value:item.id,text:item.name})
.appendTo(group);
});
group.appendTo(dropdown);
});*/
});
Каким образом каждая - функция должна быть изменена, чтобы работать должным образом?
благодарит заранее.sepp.
UPDATE:
благодаря @Endless рабочего кода:
var dropdown = $('#StringEmail').empty();
$.each(dddata, function (key, cat) {
if (typeof cat === 'string') {
$('<option/>', {value:key,text:cat}).appendTo(dropdown)
return
}
var group = $('<optgroup>', {label: key});
$.each(cat, function(value, text) {
$("<option/>", {value:value,text:text}).appendTo(group);
});
group.appendTo(dropdown);
});
Не устанавливайте асинхронное значение false! Он устарел ... – Endless
Вам нужно выполнить итерацию по вложенному «объекту» в возвращаемых вами данных. Это не массив. Вы можете попробовать 'for (var key in obj) {if (obj.hasOwnProperty (key) {//}}' или использовать 'Object.keys (obj)' для итерации по клавишам объекта, а затем заполнить опцию ' 'элемент динамически. –