我正在尝试迭代由ajax请求返回的unavailable
(s)对象。现在在某些情况下,unavailable
属性对象可能只有一个元素或0个元素。我创建了这段代码:
$.each(response.unavailables, function(index, unavailable)
{
var notes = unavailable.notes;
var start = start = unavailable.start_datetime;
var end = unavailable.end_datetime;
var data = unavailable;
//other stuff. ..
});
但我明白了:
无法读取未定义的属性长度
这是我的响应变量的结构:
答案 0 :(得分:2)
您可以使用嵌套循环并检查每个循环中的unavailables
数组是否包含数据:
$.each(response, function(index, r)
{
if (r.unavailables
&& r.unavailables.length){
$.each(r.unavailables, function(index, unavailable)
{
var notes = unavailable.notes;
var start = start = unavailable.start_datetime;
var end = unavailable.end_datetime;
var data = unavailable;
//other stuff. ..
});
}
});
答案 1 :(得分:1)
你可以在没有任何条件的情况下完成这一操作,只需迭代你的对象即可。 我做了一个plunker示例,我创建了一个类似于你的json文件,有和没有项目进入不可用数组
这是json:
[
{
"unavailables":[{"notes":"test1","start_datetime":"30/11/2015"},{"notes":"test2","start_datetime":"01/12/2015"}]
},
{
"unavailables":[{"notes":"test3","start_datetime":"03/12/2015"}]
},
{
"unavailables":[]
}
]
我故意留空,最后一个“ unavailablebles array ”。
javascript,我调用json文件。。
这里我得到json文件并阅读它。 **我使用两个循环,
不可用数组的内部。如果它是空的,就没有办法进入不可用循环,所以我们不会得到任何请求未定义变量的错误。
var xhr = new XMLHttpRequest();
xhr.onload = function() {
if (xhr.status === 200) {
console.log('JSON Fired');
responseObject = JSON.parse(xhr.responseText);
console.log(responseObject);
//here i iterate though the main objects on the outer loop
responseObject.forEach(function(obj){
//now i iterate through the unavailables array of each object and get values.
obj.unavailables.forEach(function(unav,indx,arr){
var notes = unav.notes;
var start = unav.start_datetime;
console.log(notes,start)
});
});
}
};
xhr.open('GET', 'myjson.json', true);
xhr.send(null);
住在plunker:http://plnkr.co/edit/MzpbDa?p=info
在浏览器的控制台上查看结果。 希望有所帮助,祝你好运。