我有以下jQuery代码。我能够从服务器[{"value":"1","label":"xyz"}, {"value":"2","label":"abc"}]
获取以下数据。如何对此进行迭代并使用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"
});
使用.ajax
和$.getJSON
之间的区别是什么。
答案 0 :(得分:44)
这应该可以解决问题:
$($.parseJSON(data.msg)).map(function () {
return $('<option>').val(this.value).text(this.label);
}).appendTo('#combobox');
以下是ajax
和getJSON
之间的区别(来自jQuery documentation):
[getJSON]是一个简写的Ajax函数,相当于:
$.ajax({ url: url, dataType: 'json', data: data, success: callback });
编辑:要清楚,部分问题是服务器的响应是返回一个如下所示的json对象:
{
"msg": '[{"value":"1","label":"xyz"}, {"value":"2","label":"abc"}]'
}
...因此需要使用msg
手动解析$.parseJSON()
属性。
答案 1 :(得分:25)
如果您的数据已经是数组形式,那么使用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()
比.getJSON()
更灵活 - 例如,getJson专门用作检索json的GET请求; ajax()可以在任何动词上请求获取任何内容类型(尽管有时这是没用的)。 getJSON在内部调用.ajax()。
答案 2 :(得分:6)
这是一个代码示例,它尝试从/Ajax/_AjaxGetItemListHelp/
URL中获取AJAX数据。成功后,它会使用id
= OfferTransModel_ItemID
从下拉列表中删除所有项目,然后根据AJAX调用结果填充新项目:
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']));
});
}
});
}
返回的AJAX结果应该返回编码为AJAX数组的数据,其中每个项目包含ITEMID
和ITEMDESC
个元素。例如:
{
{
"ITEMID":"13",
"ITEMDESC":"About"
},
{
"ITEMID":"21",
"ITEMDESC":"Contact"
}
}
OfferTransModel_ItemID
列表框中填充了上述数据,其代码应如下所示:
<select id="OfferTransModel_ItemID" name="OfferTransModel[ItemID]">
<option value="13">About</option>
<option value="21">Contact</option>
</select>
当用户选择About
时,表单会将13
作为此字段的值提交,并在用户选择21
时提交Contact
,依此类推。
如果您的服务器以不同的格式返回URL,则可以自由修改上述代码。
答案 3 :(得分:0)
在大多数公司中,他们需要所有页面的多个下拉列表具有通用功能。 只需调用函数或传递您的(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>