How to extract and append JSON data received as AJAX response to HTML dropdown using jQuery?

I have HTML code:

<select id="student" name="student" class="form-control"></select>

      

The jQuery-AJAX function I wrote to add parameters to the control above looks like this:

var mod_url = $('#mod_url').val(); 
$.ajax({
      url : mod_url,
      cache: false,
      dataType: "json",
      type: "GET",
      async: false,
      data: {
        'request_type':'ajax',         
      },
      success: function(result, success) { 
        $('#student').html(result);
      },
      error: function() {
        alert("Error is occured");
      }
    });

      

From a PHP file I got a large JSON encoded array (i.e. a result variable from a jQuery-AJAX function). For your reference, I only show below the first four entries from this array. In HTML select control I actually want to show all elements from this array.

[{"id":2,"stud_name":"John Dpalma","stud_address1":"277 Eisenhower Pkwy","stud_address2":"","stud_city":"Edison","stud_state":"New Jersey","stud_country":"USA","stud_zipcode":"07039","stud_email":"abc@gmail.com","created_at":1409739580,"updated_at":1410253832},
{"id":3,"stud_name":"Anthony Gonsalvis","stud_address1":"520 Division St","stud_address2":"","stud_city":"Piscataway","stud_state":"NJ","stud_country":"USA","stud_zipcode":"07201","stud_email":"pqr@gmail.com","created_at":1409740530,"updated_at":1410255590},

{"id":4,"stud_name":"James Bond","stud_address1":"6 Harrison Street, 6th Floor","stud_address2":"Ste-2324","stud_city":"New York","stud_state":"NY","stud_country":"USA","stud_zipcode":"10013","stud_email":"xyz@gmail.com","created_at":1409757637,"updated_at":1412263107},

{"id":9,"stud_name":"Mary Jane","stud_address1":"2112 Zeno Place","stud_address2":"CA","stud_city":"Venice","stud_state":"CA","stud_country":"","stud_zipcode":"90291","stud_email":"utp@gmail.com","created_at":1409908569,"updated_at":1410254282}]

      

In an HTML select control I want to set values ​​like this (consider the first two entries from the above array)

<select id="student" name="student" class="form-control">
  <option value="">Select Store</option>
  <option value="2">John Dpalma, 277 Eisenhower Pkwy, Edison</option>
  <option value="3">Anthony Gonsalvis, 520 Division St, Piscataway</option>
</select>

      

You may have noticed from the expected output above that I want to set the parameter value as id

from an array, and the text I want to display consists ofstud_name+stud_address1+stud_city

How do I manage this for all elements from JSON data in my code?

Also tell me how to show the upload option in a select control until a response from PHP appears.

Please provide me with some help.

+3


source to share


6 answers


success: function(result, success) { 
    var $select = $('#student');
    $.each(result, function (i, option) {
        var txt = [option.stud_name, option.stud_address1, option.stud_city];
        if (option.stud_address2)
            txt.splice(2, 0, option.stud_address2);
        $('<option>', {
            value: option.id,
            text: txt.join(', ')
        }).appendTo($select);
    });
},

      

or with $.map

(slightly more efficient):



success: function(result, success) { 
    var options = $.map(result, function (option) {
        var txt = [option.stud_name, option.stud_address1, option.stud_city];
        if (option.stud_address2)
            txt.splice(2, 0, option.stud_address2);
        return $('<option>', {
            value: option.id,
            text: txt.join(', ')
        });
    });
    $('#student').append(options);
},

      

+1


source


It's a matter of iterating over the JSON you get from the server, creating parameter tags for each entry, and then adding them to the select element:

var response = [{"id":2,"stud_name":"John Dpalma" ... }]

$.each(response, function (index, record) {
  if (!record.stud_address2){
    var stud_address2 = "";
  } else {
    var stud_address2 = record.stud_address2;
  }

  $('<option>', {
    value: record.id,
    text: record.stud_name + ", " + record.stud_address1 + ", " + record.stud_city + ", " + stud_address2
  }).appendTo("#student");
});

      



Demo

0


source


In the PHP file, repeat the following in a loop:

echo '<option value="">'.$stud_name.', '.$stud_address1.', '.$stud_address2.', '.$stud_city.', '.$stud_state.', '.$stud_country.'</option>';

      

Then add this result to select dropdown with jQuery via ajax success.

0


source


Here is my solution. This checks address 2 and adds it to options accordingly.

JS code:

for(var i=0;i<result.length;i++){
    if(result[i]["stud_address2"]==""){
        $('#student').append('<option value="' + result[i]["id"] + '">' + result[i]["stud_name"] + ', ' + result[i]["stud_address1"]+ ', ' +result[i]["stud_city"] +'</option>');}
    else{
     $('#student').append('<option value="' + result[i]["id"] + '">' + result[i]["stud_name"] + ', ' + result[i]["stud_address1"]+ ', '+ result[i]["stud_address2"]+ ', ' +result[i]["stud_city"] +'</option>');
    }
}

      

Here is a working DEMO

0


source


This is exactly what you need!

$(document).ready(function(){
   var mod_url = $('#mod_url').val(); 
   $.ajax({
         url : mod_url,
         cache: false,
         dataType: "json",
         type: "GET",
         async: false,
         data: {
            'request_type':'ajax',         
         },
         success: function(result, success) { 
           $.each(result,function(index,item){ 
             $label = item.stud_name +', ' + item.stud_address1 +', ' + item.stud_city;
             $('#student').append('<option value="'+ item.id +'">'+ $label +'</option>');  

           });
         },
         error: function() {
           alert("Error is occured");
         }
   });
});

      

0


source


     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
   <script>
 function __highlight(s, t) {
        var matcher = new RegExp("(" + $.ui.autocomplete.escapeRegex(t) + ")", "ig");
         return s.replace(matcher, "<strong>$1</strong>");
               }
    $(document).ready(
              function() {
                 $("#suggest").autocomplete(
                  {
                    source : function(request, response) 
                {
                    $.ajax({
                            url : 'URL',
                            dataType : 'json',
                            data : { term : request.term },
                            success : function(data) 
                                        {
                                            //alert(data[0].title);
                                            response($.map(data, function(item) {
                                                        //alert(item);
                             return {                                                           
                    label : __highlight(item.title, request.term),
                   value : item.title
                        };
                                                                                }));
                                        }
                        });
                },
        minLength : 3,
        select : function(event, ui) 
                {
                    if(ui.item){
                        $(event.target).val(ui.item.value);
                        }
                        //submit the form
                    $(event.target.form).submit();
                }
        }).keydown(function(e) {
                                    if (e.keyCode === 13) 
                                    {
                                        $("#search_form").trigger('submit');
                                    }
                                }).data("autocomplete")._renderItem = function(ul, item) 
                                                                    {
                            return $("<li></li>").data("item.autocomplete", item).append(
                            $("<a></a>").html(item.label)).appendTo(ul);
                                                                    };
        });
               </script>

      

-1


source







All Articles