我正在使用jQuery处理来自Flickr API的一些图像,并循环遍历结果集。
这有效:
$.getJSON(apiCall, function(data) {
//LOOP THROUGH DATA
$.each(data.photos.photo, function(i, photo) {
// do stuff
});
});
但是当我添加一个检查以确保填充photos
对象时,length属性是未定义的。
$.getJSON(apiCall, function(data) {
console.log(data.photos.length); // returns undefined
if(data.photos.length >= 1){
//LOOP THROUGH DATA
$.each(data.photos.photo, function(i, photo) {
// do stuff
});
} else {
// do other stuff
}
});
确定是否填充photos
对象的正确方法是什么?
编辑:返回的json数据样本:
{"photos":{"page":1, "pages":100172, "perpage":50, "total":"5008581", "photo":[{"id":"8077408556", "owner":"75972124@N08", "secret":"ede5a49ab5", "server":"8323", "farm":9, "title":"zara 2", "ispublic":1, "isfriend":0, "isfamily":0}. . .
是的,可以简单地测试是否photos.total >= 1
,但我对长度属性感到好奇。
答案 0 :(得分:1)
尝试
$.getJSON(apiCall, function(data) {
console.log(data.photos.photo.length); // returns undefined
if(data.photos.photo.length >= 1){
//LOOP THROUGH DATA
$.each(data.photos.photo, function(i, photo) {
// do stuff
});
} else {
// do other stuff
}
});
要获得长度,您需要使用data.photos.photo
答案 1 :(得分:0)
据推测,data.photos
是一个对象,而不是一个数组。除非您指定对象,否则对象没有length
属性。
测试对象中元素数量的方法是使用Object.keys
。这使得一个数组包含对象中的所有键作为其元素。因此,该数组的长度是对象中的键数。
if (Object.keys(data.photos).length >= 1) {
请注意,Object.keys
功能是在ECMA5中引入的,并且在许多浏览器中都不可用。 MDN网站包括code that adds it to older browsers。
答案 2 :(得分:0)
请试试这个:
只需使用length属性获取photo属性的长度:
data["photos"]["photo"].length;
答案 3 :(得分:0)
尝试检查null而不是object
的长度。这不是检查长度的数组
而不是
if(data.photos.length >= 1){
尝试
if(data.photos != null){
//
$.getJSON(apiCall, function(data) {
//console.log(data.photos.length); // returns undefined
if(data.photos != null){ // OR if(data.photos)
//LOOP THROUGH DATA
$.each(data.photos.photo, function(i, photo) {
// do stuff
});
} else {
// do other stuff
}
});
答案 4 :(得分:0)
您正在遍历data.photos.photo
这是一个数组,并且有一个length属性,应该通过data.photos.photo.length
访问。
如果您只想在迭代前检查data.photos
属性photo
上是否有某些内容,则可以使用if (data.photos.photo)
。