【发布时间】: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