【问题标题】:Nested getJSON calls using dynamic url from previous getJSON calls results使用来自先前 getJSON 调用结果的动态 url 嵌套 getJSON 调用
【发布时间】:2010-12-22 23:46:20
【问题描述】:

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

我们有 3 个网址,无法更改。
第一次 getJSON 调用使用 url1 来获取所有部分,在它的回调函数中我们有一个循环,在每次迭代中,我们使用 url2 + 部分名称进行第二次 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 时)。

提前感谢您的宝贵时间。

【问题讨论】:

  • 我不是很清楚问题是什么,但我可以看到一个绊脚石。您是否在第三个 JSON 回调中使用 i 变量?这会带来麻烦。
  • 问题在于循环的每次迭代都进行调用,并且循环不会等到第一次调用完成并完成下一次调用,有时结果第 2 次迭代中的第二个 json 调用首先完成,这意味着我可以开始使用以生成内容的第一部分是 json 上的第二个。不,在第三次通话中不使用那个 i。

标签: jquery json nested getjson


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多