0

I am trying to fill this HTML Select

<select id="list">
</select>

With data from JSON (the actual JSON contains more keys and values than shown below):

{"Group1": "TestGroup1", "Group2" : "TestGroup2" "TotGroups" : "2"}

Using JQuery and AJAX to fetch the data. AJAX Success response:

success: function(resp) {
var json_obj = $.parseJSON(resp); 
for (i=1, x=json_obj.TotGroups; i <= x; i++) {
$('#list').append('<option>'+json_obj.Group1+' </option>');
}

As you can see this only appends the data from json_obj.Group1. What I want is everytime the loop runs, append one group at a time, first Group 1, then Group 2, until TotGroups is reached (in this case 2).

Any ideas? :)

UPDATE: SOLVED

$('#list').append('<option>'+json_obj["Group" + i]+' </option>');

4 Answers 4

2

If you want too iterate over all properties in a javascript object you can do so using a for..in statement, as shown below. Make sure to check that its direct property of the object with Object#hasOwnProperty.

Be aware that the for...in loop iterates over the properties of an object in an arbitrary order, so it no guarantee on the order.

If the order of the values is important use an Array. I've updated the example below so it show how you could do this with an array instead.

var data = {
  "Group1": "TestGroup1",
  "Group2": "TestGroup2"
};

for (var prop in data) {
  if(data.hasOwnProperty(prop)){
     $('#list').append('<option>' + data[prop] + ' </option>');
  }
}

var otherData = {listOptions: ['Option 1','Option 2','Option 3']}

for(var i = 0; i<otherData.listOptions.length;i++){
  $('#list2').append('<option>' + otherData.listOptions[i] + ' </option>');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<select id="list">
</select>
<select id="list2">
</select>

Sign up to request clarification or add additional context in comments.

Comments

0

you can do something like

$('#list').append('<option>'+json_obj["Group" + i]+' </option>');

this will still work with your current JSON structure (using for requires you remove the TotGroups and I don't know if you can (external data))

1 Comment

very happy to help :)
0

Iterate over the object and using it's key get the value:

for (var key in json_obj) {
  $('#list').append('<option>'+ json_obj[key] +' </option>');
}

If you use ES2015, this can be made more easy:

for (let [k, v] of Object.entries(json_obj)) {
  // here 'v' represents each group
  $('#list').append(`<option>${v}</option>`);
}

NOTE In loops the control variable must be start with 0 until n - 1.

Comments

0

If you want to write the code using core java script without mixing any html code inside the JS code...

Try below solution -

var data = {"Group1": "TestGroup1", "Group2" : "TestGroup2", "TotGroups" : "2"}
var list_obj = document.getElementById("list");
var sel_opt = document.createElement("OPTION");
var i = 0;
for(k in data) { 
    var sel_opt_i = document.createElement("option");
    sel_opt_i.setAttribute("value", data[k])
    var opt_name_i = document.createTextNode(k);
    sel_opt_i.appendChild(opt_name_i);
    list_obj.appendChild(sel_opt_i);
    i++;
}

JS Fiddel url - https://jsfiddle.net/ryy6d4kf/23/

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.