嵌套的getJSON调用使用来自先前getJSON调用结果的动态URL

时间:2010-12-22 23:46:20

标签: jquery json nested getjson

我希望有人可以帮我找到更可靠的方法。

我们有3个网址,无法更改 第一个getJSON调用需要url1来获取所有部分,在它的回调函数中我们有一个循环,并且在每次迭代时我们使用url2 + section name进行第二次getJSON调用以获取所有文章id,然后第二次调用的回调函数使用每个id使用url3 + id进行第三次getJSON调用以获取每篇文章的所有细节。这里没有显示更多代码,但主要问题来自于此块。

$.getJSON(url1, function(sections) {

for(var i=0; i < sections.length; i++) {

    $.getJSON(url2 + sections.contents[i].name, function(ids) {

        $.getJSON(url3 + ids.contents[0].id, function(article) {
            // ==== Code to create article's body using only the first result ====
        })

        for(var j=0; j < ids.length; j++) {
            // ==== Code to create a list of links to all the articles ====
        }

    })

}})

我知道必须有更好的方法来做到这一点,但我仍然不知道如何做。 jsons中信息的结构不能改变,所以这些调用必须根据前一个的结果进行,但我想避免在循环内进行调用。
问题:正如预期的那样,由于第二次json调用在循环内,有时第一次迭代的结果没有到达,但第二次迭代的结果有(当i =在这种情况下为1)。

提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

你可以getJSON(url).done(function(json) {})确保在.done块内完成调用并且结果可用。