3

我在 Stackoverflow 上阅读了很多关于异步函数以及如何返回值的问题,但我无法在我的项目中应用这些提示。所以我请求你的帮助。

我正在使用 iTunes 搜索 API 在商店中查找歌曲,然后将它们添加到“播放列表”中。该项目是用 JQuery 开发的。

基本上,有一个名为“iTunesSearch”的搜索框,我在其中写下歌曲的名称,然后是一个名为“search”的按钮,单击该按钮时,将执行在 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!">

如何在回调外部传递歌曲名称变量并使用它将歌曲名称存储在数组或其他内容中?我知道问题是回调是稍后执行的。我尝试在回调中调用一个函数,但它不会将歌曲堆叠在数组中(由于失败,我没有包含此代码段)。有任何想法吗?

提前致谢。

4

1 回答 1

3

解决。我将 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})
于 2014-07-25T08:43:16.593 回答