jQuery长度属性

时间:2012-10-11 16:43:37

标签: javascript jquery

我正在使用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,但我对长度属性感到好奇。

5 个答案:

答案 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)