2013-01-17 210 views
2

我想将字段名称压入选项值并将结果压入选择的文本中。它应该是这样的:json获取字段名称

<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

的输出是什么?你在控制台中有任何错误吗? – Jai

+0

'value.id_Role'或'value.RoleId'? –

回答

2

假设01返回数组是你发布的格式obj是一个数组,你想迭代数组中的对象而不是数组本身。

$.each(obj[0], function (index, value) { 
    $('#ddl_fields') 
    .append($("<option value=" + index + ">" + value + "</option>")); 
}); 
+0

工作很好!谢谢! – Rob

2

您必须循环访问该对象的键,并使用hasOwnProperty来确定该对象的键而不是其原型。

var key, keys = []; 

for (key in obj) { 
    if (obj.hasOwnProperty(key)) 
    keys.push(key) 
} 
+0

如果我警告(键),我得到0. – Rob

+0

因为你正在测试一个数组而不是一个对象。 –

0

只要改变

$.each(obj, function (index, value) { 

$.each(obj[0], function (index, value) { 

的问题是,你在你的JSON

0

不知道如果我的理解,但这里是我会做什么让你想要什么(我还做你的代码simplier):

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); 
     } 
    }); 
} 
+1

路易十四,我以为你死于1715年,但无论如何,你的JavaScript是最新的。 –

+1

我从地狱回来只是为了jQuery :) –