我正在使用getJSON中的JSON数据填充下拉列表。
填充工作正常,但尝试通过与data.length
进行比较来确定它已完成,因为data.length
是undefined
,我无法理解为什么!
数据如下:
{
"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
显然有一个length
,以便它正确填充下拉框$.each
,它确实如此!
编辑:抱歉,应该添加,变量locationID
在前面的Cookie中声明并且IS有效
答案 0 :(得分:4)
这是一个对象:
data = {
"1": {
"id": "1",
"name": "Plymouth"
},
"2": {
"id": "2",
"name": "Torquay"
}
}
并且它没有length
属性。
请参阅:仅属性1
和2
。
您确定要将它作为对象评估者,然后是数组:
data = [
{
"id": "1",
"name": "Plymouth"
},
{
"id": "2",
"name": "Torquay"
}
]
然后你有length
属性和许多其他本机数组方法,如sort
。您可以像这样访问您的数据:
data[0]
女巫等于:
{
"id": "1",
"name": "Plymouth"
}
答案 1 :(得分:3)
可能不是这样做的最佳方式,但这样的事情可能是一个快速解决方法吗?
$('.locationList').empty();
$('.locationList').append('<option value="">Select...</option>');
$.getJSON('/Settings/locations.txt', function (data) {
var dataNum = 0;
for (i in data) {if (data.hasOwnProperty(i)) {dataNum++;}}
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++;
});
});
答案 2 :(得分:1)
你的JSON:
{"1":{"id":"1","name":"Plymouth"},"2":{"id":"2","name":"Torquay"}}
是一个对象,而不是一个数组,因此未定义length
属性。
如果要将其解析为数组,则服务器需要提供如下响应:
{"response": [{"1":{"id":"1","name":"Plymouth"}},
{"2":{"id":"2","name":"Torquay"}}] }
使用[]
代替{}
答案 3 :(得分:0)
当response.data == []时, 这有效:
if (response.data.length === 0)
这是一个数组然后有长度prospriety。