我在Stackoverflow上阅读了很多关于异步函数的问题以及如何返回值,但是我无法在我的项目中应用这些提示。所以我请求你的帮助。
我正在使用iTunes搜索API在商店中查找歌曲,然后将其添加到“播放列表”中。 该项目是在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!">
如何在回调之外传递songname变量并使用它来存储数组中的歌曲名称或其他什么? 我知道问题是稍后会执行回调。我已经尝试在回调中调用一个函数,但它不会将数组中的歌曲堆叠起来(由于失败,我没有包含这段代码)。 有什么想法吗?
提前致谢。
答案 0 :(得分:2)
解决。 我将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})