通过AJAX获取JSON数据以填充下拉菜单

3
我正在获取一些可能变化的JSON数据...例如:
返回的数据可能是:
[{"userID":"2779","UserFullName":" Absolute Pro-Formance"},{"userID":"2780","UserFullName":" AR Fabrication"},{"userID":"2781","UserFullName":" Banda Lucas Design Group"}]

或者:

[{"orderID":"112958","OrderName":"Order ID: 112958"},{"orderID":"112957","OrderName":"Order ID: 112957"},{"orderID":"112956","OrderName":"Order ID: 112956"}]

我正在尝试处理这个JSON数据,以构建一个

1
在ajax设置中加入dataType:“json”。 - Mir Gulam Sarwar
1
在您的选项中将dataType选项设置为json,默认情况下它是text/html,因此您的数据仅是一个字符串。 - Patrick Evans
这些是答案,而不是评论。随意发布它们并获得一些声望! - rossipedia
我在发布问题后才做了这件事哈哈。但这并没有真正回答实际问题,所以可能需要重新考虑一下...由于返回的JSON始终会包含每个元素的2个对象,因此每次提取时元素名称可能不同...换句话说,我可能永远不知道返回的对象的“名称”。 - Kevin
尝试使用console.log('value: ' + data[$i].Value + ' text: ' + data[$i].Text);,但是我得到了value: undefined text: undefined。这是因为键名的问题...正如我所说,我永远不会知道键名是什么...我只知道每次迭代将有两个项目...一个值和一个文本。p.s.使用.each会慢很多。 - Kevin
显示剩余4条评论
3个回答

3

您不需要使用如此混乱的代码。同时在您的Ajax设置中,dataType:"json"

。这可以帮助您更好地处理JSON格式数据。

success:function() {
    var listB=$('#yourdropdownId');
    listB.empty();  
    $.each(result, function (index, item) {
        listB.append(
            $('<option>', {
                value: item.userID,
                text: item.UserFullName
            }, '<option/>'))
         });
    }

如果您只想从服务器检索json数据,可以使用$.getJson而不是ajax。
$.getJSON('@Url.Action(" "," ")',
                { "youparametername": yourdata}, function (data) {
                    $.each(data, function (index, item) {
                    })
            });

1
你说得对,这是一个好的解决方案。但它更慢,因为你强制jQuery创建和解析每个数据。而你可以创建一个字符串并编写所有代码,如x += '<option value="'+id+'">'+userFullName+'</option>'; 然后直接将x附加到DOM中,你会更快。但是,我已经说过了,你的解决方案也很好。 - queval_j
@queval_j 当使用dataType:“json”时,数据不是已经解析为json了吗?但我认为您在创建字符串的第二个意见上是正确的。 - Mir Gulam Sarwar

1
在选项对象内部,请确保使用


dataType: 'json'

或者在成功处理程序中,您可以使用。
JSON.parse(data)

0
已解决:将我的循环更改为遍历返回的JSON中的每个项,获取它们的键等...
var $dl = data.length;
for(var $i = 0; $i < $dl - 1; ++$i) {
    var $keys = Object.keys(data[$i]);
    $html += '<option value="' + data[$i][$keys[0]] + '">' + data[$i][$keys[1]] + '</option>';
}

请添加一些解释说明如何解决这个问题。如果您还没有这样做,请不要忘记为任何有帮助的答案点赞,并标记一个答案为已接受(如果您想接受自己的答案,则需要等待48小时)。 - Adi Inbar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接