是否总是需要通过链(或按顺序)调用对象?

时间:2014-08-12 20:19:45

标签: javascript jquery

我试图浏览reddit的API。我看到了fiddle,他们从网站上抓取了图片网址。但是,我对他们如何获取物品本身感到困惑。在他们的each()语句中,他们使用了data.data.childrenitem.data.url,但是我无法在json中的另一个数据对象http://www.reddit.com/r/pics.json之后找到数据对象。我也没有看到item.data.url。如果我从一开始看(两个第一个对象是" kind"和"数据")。这是什么意思?

2 个答案:

答案 0 :(得分:4)

鉴于小提琴中的代码:

$.getJSON("http://www.reddit.com/r/pics/.json?jsonp=?", function(data) {
    $.each(data.data.children, function(i,item){
        $("<img/>").attr("src", item.data.url).appendTo("#images");
    });
});

dataitem都是函数参数,它们的名称与JSON中的任何命名键无关。

参数data表示整个JSON结构,但由于它只是一个名称不重要的参数,我将其称为foo,而不是将其从该结构的内容中消除歧义,因此{{ 1}}指的是在JSON的第一级中名为foo.data 的子元素。

data参数表示数组item中的每个元素,因此第一项的foo.data.children将等同于JSON中的item.data.url

答案 1 :(得分:1)

返回的JSON结构是:

{
    data: {
        after: "",
        before: null,
        children: [
            {
                data: {
                    url: ""
                }
            },
            ...
        ],
        modhash: ""
    },
    kind: "Listing"
}

结果变量的名称在回调函数参数中称为data。所以要找到你需要输入的孩子:

data.data.children;

接下来,在$.each循环中,children数组中的每个条目都分配给该回调函数中的item变量。它是从那里深入到url。 property(item.data.url)。

如果data.data令人困惑,您可以将这些命名为。