jquery fill dropdown with json data

后端 未结 4 1360
眼角桃花
眼角桃花 2020-11-28 06:51

I have the following jQuery code. I am able to get the following data from server [{\"value\":\"1\",\"label\":\"xyz\"}, {\"value\":\"2\",\"label\":\"abc\"}]. Ho

相关标签:
4条回答
  • 2020-11-28 07:29

    If your data is already in array form, it's really simple using jQuery:

     $(data.msg).each(function()
     {
         alert(this.value);
         alert(this.label);
    
         //this refers to the current item being iterated over
    
         var option = $('<option />');
         option.attr('value', this.value).text(this.label);
    
         $('#myDropDown').append(option);
     });
    

    .ajax() is more flexible than .getJSON() - for one, getJson is targeted specifically as a GET request to retrieve json; ajax() can request on any verb to get back any content type (although sometimes that's not useful). getJSON internally calls .ajax().

    0 讨论(0)
  • 2020-11-28 07:34

    Here is an example of code, that attempts to featch AJAX data from /Ajax/_AjaxGetItemListHelp/ URL. Upon success, it removes all items from dropdown list with id = OfferTransModel_ItemID and then it fills it with new items based on AJAX call's result:

    if (productgrpid != 0) {    
        $.ajax({
            type: "POST",
            url: "/Ajax/_AjaxGetItemListHelp/",
            data:{text:"sam",OfferTransModel_ItemGrpid:productgrpid},
            contentType: "application/json",              
            dataType: "json",
            success: function (data) {
                $("#OfferTransModel_ItemID").empty();
    
                $.each(data, function () {
                    $("#OfferTransModel_ItemID").append($("<option>                                                      
                    </option>").val(this['ITEMID']).html(this['ITEMDESC']));
                });
            }
        });
    }
    

    Returned AJAX result is expected to return data encoded as AJAX array, where each item contains ITEMID and ITEMDESC elements. For example:

    {
        {
            "ITEMID":"13",
            "ITEMDESC":"About"
        },
        {
            "ITEMID":"21",
            "ITEMDESC":"Contact"
        }
    }
    

    The OfferTransModel_ItemID listbox is populated with above data and its code should look like:

    <select id="OfferTransModel_ItemID" name="OfferTransModel[ItemID]">
        <option value="13">About</option>
        <option value="21">Contact</option>
    </select>
    

    When user selects About, form submits 13 as value for this field and 21 when user selects Contact and so on.

    Fell free to modify above code if your server returns URL in a different format.

    0 讨论(0)
  • 2020-11-28 07:46

    In most of the companies they required a common functionality for multiple dropdownlist for all the pages. Just call the functions or pass your (DropDownID,JsonData,KeyValue,textValue)

        <script>
    
            $(document).ready(function(){
    
                GetData('DLState',data,'stateid','statename');
            });
    
            var data = [{"stateid" : "1","statename" : "Mumbai"},
                        {"stateid" : "2","statename" : "Panjab"},
                        {"stateid" : "3","statename" : "Pune"},
                         {"stateid" : "4","statename" : "Nagpur"},
                         {"stateid" : "5","statename" : "kanpur"}];
    
            var Did=document.getElementById("DLState");
    
            function GetData(Did,data,valkey,textkey){
              var str= "";
              for (var i = 0; i <data.length ; i++){
    
                console.log(data);
    
    
                str+= "<option value='" + data[i][valkey] + "'>" + data[i][textkey] + "</option>";
    
              }
              $("#"+Did).append(str);
            };    </script>
    
    </head>
    <body>
      <select id="DLState">
      </select>
    </body>
    </html>
    
    0 讨论(0)
  • 2020-11-28 07:54

    This should do the trick:

    $($.parseJSON(data.msg)).map(function () {
        return $('<option>').val(this.value).text(this.label);
    }).appendTo('#combobox');
    

    Here's the distinction between ajax and getJSON (from the jQuery documentation):

    [getJSON] is a shorthand Ajax function, which is equivalent to:

    $.ajax({
      url: url,
      dataType: 'json',
      data: data,
      success: callback
    });
    

    EDIT: To be clear, part of the problem was that the server's response was returning a json object that looked like this:

    {
        "msg": '[{"value":"1","label":"xyz"}, {"value":"2","label":"abc"}]'
    }
    

    ...So that msg property needed to be parsed manually using $.parseJSON().

    0 讨论(0)
提交回复
热议问题