2

我想将字段名称推送到选项值中,并将结果推送到选择的文本中。它应该如下所示:

<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 解决方案。 如何使用 ExtJS 获取/列出 JSON 数据的所有字段名称?

谢谢!

4

5 回答 5

2

您必须遍历对象的键,并使用hasOwnProperty它来确保它是对象的键而不是其原型的键。

var key, keys = [];

for (key in obj) {
  if (obj.hasOwnProperty(key))
    keys.push(key)
}
于 2013-01-17T18:59:56.657 回答
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

于 2013-01-17T19:00:07.983 回答
2

假设data.d您发布的格式obj是一个数组,并且您想要迭代数组中的对象而不是数组本身。

$.each(obj[0], function (index, value) {
    $('#ddl_fields')
    .append($("<option value=" + index + ">" + value + "</option>"));
});
于 2013-01-17T19:05:07.493 回答
0

只是改变

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

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

问题是您在 json 中返回一个数组

于 2013-01-17T19:04:08.817 回答
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);
        }
    });
}
于 2013-01-17T19:07:25.820 回答