0

我正在使用 jQuery 处理来自 Flickr API 的一些图像,并循环遍历结果集。

这有效:

$.getJSON(apiCall, function(data) {
    //LOOP THROUGH DATA
    $.each(data.photos.photo, function(i, photo) {
        // do stuff
    });
});

但是当我添加检查以确保photos对象已填充时,长度属性未定义。

$.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}. . .

是的,可以简单地测试 ifphotos.total >= 1但我对长度属性很好奇。

4

5 回答 5

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

于 2012-10-11T16:48:13.437 回答
0

大概data.photos是一个对象,而不是一个数组。length除非您指定,否则对象没有属性。

测试对象中元素数量的方法是使用Object.keys. 这将创建一个数组,其中包含对象中的所有键作为其元素。因此,这个数组的长度就是对象中键的数量。

if (Object.keys(data.photos).length >= 1) {

请注意,该Object.keys功能是在 ECMA5 中引入的,在许多浏览器中不可用。MDN 网站包含将其添加到旧浏览器的代码

于 2012-10-11T16:48:20.727 回答
0

请试试这个:

只需使用 length 属性来获取 photo 属性的长度:

data["photos"]["photo"].length;
于 2012-10-11T16:57:38.587 回答
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
    }
});
于 2012-10-11T16:58:56.497 回答
0

您正在遍历data.photos.photowhich 是一个数组并具有一个长度属性,应该通过data.photos.photo.length.

如果你只是想在迭代之前检查data.photos它的属性有什么,你可以使用.photoif (data.photos.photo)

于 2012-10-11T17:09:11.473 回答