长度未在jquery中定义

时间:2013-10-08 08:29:07

标签: jquery json

我正在尝试在JSON数据中搜索对象的属性。

但我在jQuery中收到类似uncaught type error:length is not defined的错误。我的JSON看起来像这样:

var list = {
    meta: {
        limit: 1000,
        offset: 0,
        previous: null,
        total_count: 1797
    },
    objects: [{
        id: 1215,
        location: {
            id: 1306,
            name: "Austin",
            parent_id: 43,
            type: "City",
        },
        name: "2ND Street District",
    }]
};

$.each(list.objects.location, function (i, v) {
    if (v.id.search(new RegExp(/1036/i)) != -1) {
        alert(v.name);
        return;
    }
});

给我关于这个问题的任何想法。

4 个答案:

答案 0 :(得分:1)

您的代码中有两个错误。首先,您没有迭代数组。数组是list.objects,而不是list.objects.location(这就是您收到错误length is not defined的原因)。因此,您必须将$.each()来电更改为:

$.each(list.objects, function(i, v) {

现在您可以使用v.location.id来访问当前对象的ID。她来了下一个问题:它是一个整数,它没有函数search(),所以我们直接在表达式上使用.test(),它在测试之前将整数转换为所需的字符串,它返回结果作为布尔值,这正是你需要的。

  if ( /1306/.test(v.location.id) ) {
    alert(v.name);
  }
});

查看有效的jsfiddle

答案 1 :(得分:0)

对象是一个列表,然后里面是对象(位置),因此您必须使用[0]

更改

$.each(list.objects.location

$.each(list.objects[0].location

<强>更新

试试这个

$(list.objects[0].location).each(function () {
    if (this.id.toString().match(/1036/g) != -1) {
        alert(this.name);
        return
    }
});

答案 2 :(得分:0)

这个小提琴将显示json中对象位置的所有数据。检查http://jsbin.com/AZAhaWo/3/edit

$.each(list.objects[0].location, function(i, v) 
    {

       alert(v);

    }
    });

答案 3 :(得分:0)

实际上有3个错误...... json数据中的错误(虽然没关系,但仍然存在)

 type: "City",
},
name: "2ND Street District",

应该是

 type: "City"
},
name: "2ND Street District"

并改变

$.each(list.objects.location, function(i, v) 
{
  if (v.id.search(new RegExp(/1036/i)) != -1) 
   {
    alert(v.name);
        return;
    }
});

$.each(list.objects, function (i, v) {
            if (v.location.id.toString().search(new RegExp(/1036/i)) != -1) {
                alert(v.location.name);
                return;
            }
        });

因此,您的完整代码如下:

 var list = {
            meta: {
                limit: 1000,
                offset: 0,
                previous: null,
                total_count: 1797
            },
            objects: [
                {
                    id: 1215,
                    location: {
                        id: 1306,
                        name: "Austin",
                        parent_id: 43,
                        type: "City"
                    },
                    name: "2ND Street District"
                }
                ]
        };

        $.each(list.objects, function (i, v) {

            if (v.location.id.toString().search(new RegExp(/1036/i)) != -1) {
                alert(v.location.name);
                return;
            }
        });

这是一个有效的demo