2013-10-24 2 views
1

Привет У меня есть следующий HTMLЗаполнение COMBOBOX Используя значение JSON

<select id="fld_base_profile_id" defaultValue="-1" class="m-wrap span10" field="fld_base_profile_id" appEditor="true"></select> 

У меня есть это в моем AJAX

$result['analyze_type'][] = array ("id" => $row[idatabase::FIELD_ID], "name" => $row[idatabase::FIELD_PROFILE_NAME]); 
echo json_encode($result); 

и в Js части (кстати, я использую Prototype.js):

var JSON = transport.responseText.evalJSON(); 

В консоли, мой JSON.analyze_type выглядит следующим образом

Array[1] 
0: Object 
id: "939" 
name: "Reaktif İndüktif Kontrolü Ana Profili" 

Вопрос в том, как я могу разобрать этот JSON данные, чтобы он мог изменить HTML как

<option value="id">name</option> ?? 

EDIT: Решение:

this.baseProfile = $("fld_base_profile_id"); 

var JSON = transport.responseText.evalJSON(); 
    this.type = JSON.analyze_type; 
    for(var i = 0; i < JSON.analyze_type.length; i++) { 
     var profile = JSON.analyze_type[i]; 
     var opt  = document.createElement("option"); 
     opt.value = profile.id; 
     opt.text = profile.name; 
     this.baseProfile.appendChild(opt); 
    } 

ответ

1

Попробуйте

var el = document.getElementById('fld_base_profile_id'); 

for(var i = 0; i < JSON.length; i++) { 
    var profile = JSON[i], 
     opt = document.createElement("option"); 

    opt.id = profile.id; 
    opt.value = profile.name; 
    el.appendChild(opt); 
}​ 
+0

Большое спасибо! Я сделал некоторые изменения, основанные на вашем коде, и он работает как шарм. – FreshPro

+0

Приятно слышать, пожалуйста, дайте мне знать, есть ли у кода какие-либо ошибки, я исправлю это. – andbas

+1

Я редактировал вопрос с моим решением, вы можете проверить его – FreshPro

0

Вы можете использовать JSON.parse, чтобы включить JSON вы попадаете в объект. затем вы можете перебрать элементы, назначить каждый объект <option>, а затем добавить их к выбору.

JavaScript - populate drop down list with array объясняет, как создать теги параметров.

1

Вы можете сделать это в более чистым способом

Во-первых, убедитесь, что вы передаете заголовок Content-Type: application/json в ответе JSON - все методы Ajax в Prototype автоматически обработает ответ в формате JSON и поместить его в transport.responseJSON

Тогда ваш Javascript может очистить до этого

this.baseProfile = $("fld_base_profile_id"); 

var type = transport.responseJSON.analyze_type; 

type.each(function(item){ 
    var option = new Element('option',{'value':item.id}).update(item.name); 
    this.baseProfile.insert(option); 
},this); 
+0

Ничего себе, это намного чище! – FreshPro

Смежные вопросы