Возвращаемые значения из обратного вызова API поиска iTunes

Я прочитал много вопросов об асинхронной функции здесь, в Stackoverflow, и о том, как возвращать значения, но я не могу применить эти подсказки к своим проектам. Поэтому я прошу вашей помощи для этого.

Я использую API поиска iTunes, чтобы найти песни в магазине, а затем добавить их в «список воспроизведения». Проект разработан на JQuery.

По сути, есть окно поиска под названием «iTunesSearch», в котором я пишу название песни, а затем кнопка «Поиск», при нажатии которой выполняется код для поиска песни в магазине iTunes. Что я хочу сделать, так это взять название песни, поместить в массив, показать его в div на странице, а затем найти другие песни и повторить процесс снова и снова. В конце я хотел бы иметь массив, содержащий все песни, которые я искал.

Вот код:

$(document).ready(function() {
  $('#search').click(function(){
            var media = "music";  
            var limitOfSearchResults = 1;  
            var thing = document.getElementById('itunesSearch').value;
            var whatosearch = $('#itunesSearch').attr('value'); 

            $.getJSON("http://itunes.apple.com/search?term=" + thing   
                        + "&country=us&limit=" + limitOfSearchResults   
                        + "&media=" + media
                        + "&callback=?",function(data) {  

                songname = data["results"][0].trackName;
                resultPlaylist = createPlaylist(song);
                alert(resultPlaylist); //is always 1, it doesn't add songs when I repeat search

                });
          function createPlaylist(song){
           var playlist = new Array ();
           playlist.push(song);
           return playlist.length; //to test if the array stores the results

          )};

});

А вот фрагмент тела HTML:

<input id="itunesSearch" type="text" placeholder="Search for a song..">
<div id="resultiTunes"></div>
<input id="search" type= "button"  value="Find!">

Как я могу передать переменную названия песни вне обратного вызова и использовать ее для хранения названия песни в массиве или что-то еще? Я понял, что проблема в том, что обратный вызов выполняется позже. Я попытался вызвать функцию внутри обратного вызова, но она не будет складывать песни в массив (я не включил фрагмент кода для этого из-за его сбоя). Любые идеи?

Заранее спасибо.


person IljaRilic    schedule 11.07.2014    source источник


Ответы (1)


Решено. Я помещаю запрос getJSON в функцию и устанавливаю возврат. Затем вызывается состояние .done() для использования результатов:

function foo(){ return $.getJSON("http://itunes.apple.com/search?media=music&term=2&country=it&limit=60&attribute=genreIndex&entity=song&callback=?",function(data) { 
                        //stub
                        }
                )}

foo().done(function(result){
//do something with result})
person IljaRilic    schedule 25.07.2014