jquery-Dropdown mit json-Daten füllen

Lesezeit: 5 Minuten

jquery Dropdown mit json Daten fullen
Benutzer373201

Ich habe den folgenden jQuery-Code. Ich kann die folgenden Daten vom Server abrufen [{"value":"1","label":"xyz"}, {"value":"2","label":"abc"}]. Wie iteriere ich darüber und fülle ein Auswahlfeld mit id=combobox

$.ajax({
    type: 'POST',
    url: "<s:url value="/ajaxMethod.action"/>",
    data:$("#locid").serialize(),
    success: function(data) {
        alert(data.msg);

                //NEED TO ITERATE data.msg AND FILL A DROP DOWN
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert(textStatus);
    },
    dataType: "json"
});

Und was ist der Unterschied zwischen Verwendung .ajax und $.getJSON.

  • Welche Version von jQuery haben Sie verwendet, user373201?

    – dance2die

    24. April 2012 um 18:02 Uhr


jquery Dropdown mit json Daten fullen
Namuol

Das sollte den Trick machen:

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

Hier ist die Unterscheidung zwischen ajax und getJSON (von dem jQuery-Dokumentation):

[getJSON] ist eine abgekürzte Ajax-Funktion, die äquivalent ist zu:

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

BEARBEITEN: Um es klar zu sagen, ein Teil des Problems bestand darin, dass die Antwort des Servers ein json-Objekt zurückgab, das so aussah:

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

…So dass msg Eigenschaft musste manuell mit analysiert werden $.parseJSON().

  • Ich erhalte die folgende nicht erfasste Ausnahme: Syntaxfehler, nicht erkannter Ausdruck: [{“value”:”1″,”label”:”xyz – abc”}] in dieser Zeile $(data.msg).map(function () {

    – Benutzer373201

    10. Mai 11 um 18:43 Uhr

  • Ach, natürlich. data.msg ist nur ein String, also muss es in ein JS-Objekt geparst werden. Ich habe das obige Code-Snippet aktualisiert, um dies zu tun, aber Sie sollten wahrscheinlich die Antwort Ihres Servers so korrigieren, dass das Objekt „msg“ tatsächlich direkt zurückgegeben wird, anstatt es zuerst als Zeichenfolge zu codieren.

    – Namuol

    10. Mai ’11 um 19:10 Uhr


  • @namuol Ich weiß, dass dies eine alte Q / A ist, und anscheinend haben Sie viele Upvotes erhalten, aber ich hatte den gleichen Fehler, als ich ein JSON-Objekt erstellte, Daten analysierte und in ein neues Array drückte. Es sah ähnlich aus wie das, was Sie in Ihrer Bearbeitung hinzugefügt haben, außer dass ich Namen von Personen in verwendet habe labelso war es Doe, John Q. Es gab mir einen Fehler in Array-Zeile 1, Feld 2, ich glaube, es hat es so beschrieben. Wenn ich es einfach täte $.each(dataArray, function () { $("#combobox").append($("<option></option>").val(this['value']).html(this['label'])); }); es funktioniert perfekt. Also frage ich mich warum parseJSON würde nicht funktionieren. Namen vielleicht?

    – vapcguy

    26. Oktober 21 um 22:05 Uhr

Wenn Ihre Daten bereits in Array-Form vorliegen, ist es mit jQuery ganz einfach:

 $(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() ist flexibler als .getJSON() – Zum einen ist getJson speziell als GET-Anforderung zum Abrufen von JSON gedacht; ajax() kann bei jedem Verb anfordern, einen beliebigen Inhaltstyp zurückzugeben (obwohl das manchmal nicht nützlich ist). getJSON ruft intern .ajax() auf.

  • Nur eine Empfehlung. Erstellen Sie das gesamte HTML und speichern Sie es in einer Variablen. Wenn Sie fertig sind, fügen Sie den gesamten HTML-Code auf einmal hinzu, indem Sie stattdessen .html() verwenden. Es beschleunigt den Prozess, wenn Sie viele Optionen haben.

    – Josh Mein

    10. Mai 11 um 15:24 Uhr

  • Danke für die Wiederholung und den Kommentar. Ich erhalte die folgende nicht erfasste Ausnahme: Syntaxfehler, nicht erkannter Ausdruck: [{“value”:”1″,”label”:”xyz – abc”}] in dieser Zeile $(data.msg).each(function(){

    – Benutzer373201

    10. Mai 11 um 18:23 Uhr


  • Ich gehe davon aus, dass Ihre Daten unter dem Feld data.msg eingehen. Wenn das alle Daten sind, die zurückkommen, tun Sie es einfach $(data).each.

    – Tejs

    10. Mai ’11 um 18:48 Uhr

  • Ich sehe, dass der Server am Anfang und am Ende der JSON-Zeichenfolge doppelte Anführungszeichen setzt. Was tatsächlich zurückgegeben wird, ist “[{“value”:”1″,”label”:”xyz – abc”}]”. Gibt es eine js/jquery-Methode zum Konvertieren in JSON oder muss ich Zeichenfolgen ersetzen, um die Anführungszeichen am Anfang und am Ende zu entfernen

    – Benutzer373201

    10. Mai ’11 um 19:00 Uhr

1643589066 873 jquery Dropdown mit json Daten fullen
sumit pardeshi

Hier ist ein Codebeispiel, das versucht, AJAX-Daten abzurufen /Ajax/_AjaxGetItemListHelp/ URL. Bei Erfolg werden alle Elemente aus der Dropdown-Liste mit entfernt id = OfferTransModel_ItemID und dann füllt es es mit neuen Elementen basierend auf dem Ergebnis des AJAX-Aufrufs:

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']));
            });
        }
    });
}

Es wird erwartet, dass das zurückgegebene AJAX-Ergebnis als AJAX-Array codierte Daten zurückgibt, in denen jedes Element enthalten ist ITEMID und ITEMDESC Elemente. Beispielsweise:

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

Der OfferTransModel_ItemID Die Listbox ist mit den obigen Daten gefüllt und ihr Code sollte wie folgt aussehen:

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

Wenn der Benutzer auswählt AboutFormular absendet 13 als Wert für dieses Feld und 21 wenn der Benutzer auswählt Contact und so weiter.

Es steht Ihnen frei, den obigen Code zu ändern, wenn Ihr Server die URL in einem anderen Format zurückgibt.

  • Könnten Sie bitte Ihre Antwort sowie den Posting-Code beschreiben? So wie es aussieht ist das nicht besonders hilfreich.

    – Marko

    14. August 13 um 8:20 Uhr

  • externe Klammern sollten quadratisch sein [, ] da es sich um ein Array handelt

    – JT

    21. Februar 16 um 11:10 Uhr

jquery Dropdown mit json Daten fullen
Neuling

In den meisten Unternehmen wurde eine gemeinsame Funktionalität für mehrere Dropdownlisten für alle Seiten benötigt. Rufen Sie einfach die Funktionen auf oder übergeben Sie Ihre (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>

.

707560cookie-checkjquery-Dropdown mit json-Daten füllen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy