我正在使用 getJSON 中的 JSON 数据填充下拉列表。
填充工作正常,但尝试通过与 data.length
进行比较来确定填充已完成,但无法正常工作,因为 data.length
是未定义
我不明白为什么!
数据如下:
{
"1": {
"id": "1",
"name": "Plymouth"
},
"2": {
"id": "2",
"name": "Torquay"
}
}
我的代码如下:
$('.locationList').empty();
$('.locationList').append('<option value="">Select...</option>');
$.getJSON('/Settings/locations.txt', function (data) {
var dataNum = data.length;
var counter = 1;
$.each(data, function (i, item) {
$('.locationList').append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
if (counter >= dataNum) {
$('#bookTo').val(locationID + 1);
$('#transferFrom').val(locationID);
};
counter++;
});
});
本节:
if (counter >= dataNum) {
$('#bookTo').val(locationID + 1);
$('#transferFrom').val(locationID);
};
counter++;
旨在让我在 $.each
循环完成后预设下拉框的值(这适用于其他列表),但它没有发生。
当我运行alert(data.length)
时,我得到undefined
,这没有任何意义,因为data
显然有一个长度
以便它通过 $.each
正确填充下拉框,它确实做到了!
编辑:抱歉,应该添加,变量 locationID
是在脚本的前面通过 Cookie 声明的并且是有效的
最佳答案
这是一个对象:
data = {
"1": {
"id": "1",
"name": "Plymouth"
},
"2": {
"id": "2",
"name": "Torquay"
}
}
并且它没有 length
属性。
请参阅:仅属性 1
和 2
。
您确定希望将其作为对象评估器然后作为数组吗:
data = [
{
"id": "1",
"name": "Plymouth"
},
{
"id": "2",
"name": "Torquay"
}
]
然后您就有了 length
属性和许多其他 native 数组方法,例如 sort
。您可以像这样访问您的数据:
data[0]
女巫等于:
{
"id": "1",
"name": "Plymouth"
}
关于jquery - 成功 getJSON 操作后 data.length 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9428190/