2016-10-11 7 views
0

私はsilverstripe関数から配列を返すAjax呼び出しを持っています。javascript fill optogroupedドロップダウン

{ 
    "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); 
    });*/ 

}); 

は、どのように各ました - 機能が正しく動作するように変更するには?

ありがとうございます。

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); 
       }); 
+0

asyncをfalseに設定しないでください。それは廃止されました... – Endless

+0

返されたデータのネストされた 'object'を反復処理する必要があります。これは配列ではありません。 (obj.hasOwnProperty(key){//}} 'を使うか、' Object.keys(obj) 'を使ってオブジェクトのキーを反復処理することができます。 '要素を動的に変更しました。 –

答えて

0
AJAX一部を表示する必要は

が、とにかく...あなたはほとんどそれを得ました。

var dropdown = $("<select>") 

$.each(dddata, function (key, cat) { 
    if (typeof cat === 'string') { 
    $('<option disabled>', {text: cat}) 
    .appendTo(dropdown) 
    return 
    } 

    var group = $('<optgroup>', {label: key}) 

    $.each(cat, function(value, text) { 
    $('<option>', {value, text}) 
    .appendTo(group); 
    }); 

    group.appendTo(dropdown); 
}) 
+0

は動作しました;ありがとうございます。 –

関連する問題