需要帮助理解这段代码

时间:2013-06-18 14:58:14

标签: jquery json yql

如果这是发布此类事情的错误地点,我提前道歉,但是我们走了:

以下是我目前在我的网站上实现的代码(感谢此代码charlietfl

$(document).ready(function(){
    var url='http://query.yahooapis.com/v1/public/yql?q=select * from html where url=\'https://stackoverflow.com/\'and xpath=\'//div[@id="question-mini-list"]//h3//a\'&format=json&callback=?';    
    $.getJSON( url, function(data){
        $.each(data.query.results.a, function(){ 
            $('#stack').append('<td><a href="http://stackoverflow.com'+this.href +'">'+this.content+'</a></td>')           
        })
    })
});

我讨厌使用我不完全理解的代码,所以这是我的问题:

在查询的'var url'中,他使用@ id =“question-mini-list”。我查看了stackoverflow的html,并且该名称没有任何内容(我最接近的是一个名为'question-hyperlink'的类),为什么这样做呢?

第二:在'each'中,data.query.results.a我没有在其他地方看到'query'或'results',所以我怎么知道使用那些?

最后一个问题:在'url'结束时为什么'callback =?' ?

非常感谢你! :)

2 个答案:

答案 0 :(得分:2)

  1. 如果您在stackoverflow.com上查看来源,您会看到:

    <div id="question-mini-list">

    <h3><a href="/questions/....">...</a></h3>

    ...

  2. YQL result JSON object看起来像:

    { query: { results: { a: [ ... ] } } }

  3. 显然callback needs to be set可以获得JSON输出。

答案 1 :(得分:1)

当你谷歌的东西时,你会惊讶于你会发现什么!

我对XPath一无所知,但我注意到你要问的@id与XPath有关:

xpath=\'//div[@id="question-mini-list"]

我用谷歌搜索'XPath'并找到一个页面,解释@id是选择上下文节点的'id'属性的简写。

现在,我确实对你的问题中的下两个点了解了一点,但如果我没有,我肯定Google会告诉我.getJSON()返回一个数据对象。从查询中,我可以推断出对象的结构类似于:

data: {
    query: {
        results: {
            a: // something
        }
    }
}

您可以事先知道使用data.query.results.a,也可以使用控制台发现数据对象的结构。

Google还会向我指出有关解释该问号语法的JSON回调的文档。