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?
…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
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:
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
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>
.
7075600cookie-checkjquery-Dropdown mit json-Daten füllenyes
Welche Version von jQuery haben Sie verwendet, user373201?
– dance2die
24. April 2012 um 18:02 Uhr