Вложенные вызовы getJSON с использованием динамического URL из результатов предыдущих вызовов getJSON - PullRequest
0 голосов
/ 23 декабря 2010

Я надеюсь, что кто-то может помочь мне найти более надежный способ сделать это.

У нас есть 3 URL, которые нельзя изменить.Первый вызов getJSON принимает url1 для получения всех разделов, внутри его функции обратного вызова у нас есть цикл, и на каждой итерации мы делаем второй вызов getJSON, используя url2 + имя раздела для получения всех идентификаторов статей, затем функция обратного вызова для этого второго вызовакаждый идентификатор, чтобы сделать третий вызов getJSON, используя url3 + id, чтобы получить все детали каждой статьи.Здесь больше кода не показано, но основная проблема связана с этим блоком.

$.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 не может быть изменена, поэтому эти вызовы должны быть сделаны на основе результатов предыдущего, но я хочу избежать вызовов внутри цикла. Проблема : Как и следовало ожидать, так как 2-й вызов json находится внутри цикла, иногда результаты первой итерации не поступают, но есть результаты 2-й итерации (когда i = 1в этом случае).

Заранее спасибо за ваше время.

1 Ответ

0 голосов
/ 06 мая 2013

Вы можете getJSON(url).done(function(json) {}), что гарантирует, что внутри блока .done вызов завершен и результаты доступны.

...