我想将字段名称推入选项值,将结果推送到选择的文本中。它应该是这样的:
<select id="ddl_fields">
<option value="RoleId">e407d28a</option>
<option value="RoleName">Sales</option>
</select>
这是从数据库返回的json对象:
"[{"RoleId":"e407d28a","RoleName":"Sales"}]"
这是代码,它会返回一个有效的结果:
function getFields(){
var the_id = $(".hid_ID").val();
var jsonText = JSON.stringify({ id: the_id });
$.ajax({
type: "POST",
url: "bc_Admin.aspx/getFields",
data: jsonText,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
if (data.d != "0") {
var obj = $.parseJSON(data.d);
//what needs to change???
$.each(obj, function (index, value) {
$('#ddl_fields')
.append($("<option value=" + value.id_Role + ">" + value.RoleName + "</option>"));
});
}
} //end success
});
}
与此问题类似但需要JQuery解决方案。 How to get/list all field names of a JSON data with ExtJS?
谢谢!
答案 0 :(得分:2)
您必须遍历对象的键,并使用hasOwnProperty
来确保它是对象的键而不是其原型的键。
var key, keys = [];
for (key in obj) {
if (obj.hasOwnProperty(key))
keys.push(key)
}
答案 1 :(得分:2)
您需要遍历该对象并使用hasOwnProperty()。
for (var i in inputData) {
if (inputData.hasOwnProperty(i)) {
console.log(i + " , " + inputData[i]);
}}
此示例将仅记录到控制台键:值。
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
答案 2 :(得分:2)
假设data.d
采用您发布的格式obj
是一个数组,并且您希望迭代数组中的对象而不是数组本身。
$.each(obj[0], function (index, value) {
$('#ddl_fields')
.append($("<option value=" + index + ">" + value + "</option>"));
});
答案 3 :(得分:0)
只需更改
$.each(obj, function (index, value) {
到
$.each(obj[0], function (index, value) {
问题是你在json中返回一个数组
答案 4 :(得分:0)
不确定我是否理解,但这就是我要做的事情,以获得你想要的东西(我也简化了你的代码):
function getFields(the_id){
$.ajax({
type: "POST",
url: "bc_Admin.aspx/getFields",
data: { id : the_id },
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
for(var i = 0; i < data.length; i++){
console.log(i + ": " + data[i]);
}
},
error : function(s , i , error){
console.log(error);
}
});
}