2016-02-26 2 views
2

Я пытаюсь извлечь информацию из API Лиги Легенд.Извлечение переменной из функции

Чтобы упростить то, что я делаю, я пытаюсь извлечь информацию о пользователе и их предыдущих матчах. Проблема, с которой я сталкиваюсь, заключается в том, что когда я разбираю запрос JSON, он возвращает идентификатор чемпиона, а не его имя (пример: 412, а не «Thresh»).

Единственное решение, которое я могу увидеть, это сделать другой запрос JSON и проанализировать эти данные для имени чемпиона. В настоящее время я выгляжу так.

$.getJSON(championMasteryPHP, function (json) { 
    for (var i = 0; i < 20; i++) { 
     var champID = json[i].championId; 
     var championInfo = "http://example.com/champInfo.php?summonerid=" + champID; 

    $.getJSON(championInfo, function (json2) { 
     var champName = json2.name; 
    }); 

    $('#champ').append("<li>"+champID+" - "+champName+"</li>") 
    } 
}); 

Я не могу получить доступ к переменной champName из-за его вложенными второй функции JSON.

Есть ли лучший способ сделать это?

+2

просто добавьте li внутри своего вложенного вызова chanpionInfo? Кроме того, его json2.name и не json.name – juvian

ответ

4
$.getJSON(championMasteryPHP, function (json) { 
    for (var i = 0; i < 20; i++) { 
     var champID = json[i].championId; 
     var championInfo = "http://example.com/champInfo.php?summonerid=" + champID; 

    $.getJSON(championInfo, function (json2) { 
     var champName = json2.name; 
     $('#champ').append("<li>"+champID+" - "+champName+"</li>") 
    }); 
    } 
}); 

Просто поместите его во второй запрос json, так как вам нужно подождать, пока этот запрос будет выполнен в любом случае.

+0

О, ничего себе, это прекрасно. Спасибо за вашу помощь! – Zlkva

4

Вы должны положить заявление на добавление в функции обратного вызова, потому что getJSON асинхронный метод (это означает, что запрос выполняется в фоновом режиме, и вызывает вашу функцию назад, когда он получил ответ), так что вы должны ждать, ответ первые, то вы можете добавить его в #champ:

$.getJSON(championMasteryPHP, function (json) { 
    for (var i = 0; i < 20; i++) { 
     var champID = json[i].championId; 
     var championInfo = "http://example.com/champInfo.php?summonerid=" + champID; 

     $.getJSON(championInfo, function (json2) { 
      var champName = json.name; 

      $('#champ').append("<li>"+champID+" - "+champName+"</li>") 
     }); 

    } 
}); 

Надеется, что это помогает.

+0

Небольшой вопрос, После перемещения заявления append теперь мои первые циклы вызовов, поэтому мой конечный результат выглядит так. http://i.imgur.com/Cp5SpX0.png Он перебирает последний элемент в списке (например, Id 58). Что я сделал не так? – Zlkva

+0

Я не уверен, что вы ожидаете в результате, но это действительно зависит от ответа Json. (просто небольшое примечание: вместо '20' лучше, если вы используете' json.length'). –

+0

Что я пытаюсь сделать, это получить эти данные http://pastebin.com/H1hbCJXJ Но он не содержит имена чемпионов, а их идентификатор. Из-за этого мне нужно разобрать отдельные данные для каждого идентификатора чемпиона, чтобы получить их имя. Это выглядит так. http://pastebin.com/CWZ1R0Pg Проблема, с которой я столкнулся сейчас, заключается в том, что мой первый синтаксический анализ заморозит мой последний результат в наборе данных, а не зацикливается в цикле for и вытаскивает каждый результат. Похоже на это. http://i.imgur.com/Cp5SpX0.png вместо этого http://i.imgur.com/y91HRJ3.png – Zlkva

Смежные вопросы