Javascript 如何从nodejs中的Spotify API获取每页播放列表
我试图从spotify API中获取用户的所有播放列表,并将其放入选择列表中。我一次只能访问20个播放列表,因此我创建了一个while循环,使用next page属性遍历播放列表的每一页,但由于某些原因,它会导致无限循环。我猜问题出在uri=playlist.next行中,如下所示。非常感谢您的帮助,以下是代码:Javascript 如何从nodejs中的Spotify API获取每页播放列表,javascript,jquery,json,node.js,spotify,Javascript,Jquery,Json,Node.js,Spotify,我试图从spotify API中获取用户的所有播放列表,并将其放入选择列表中。我一次只能访问20个播放列表,因此我创建了一个while循环,使用next page属性遍历播放列表的每一页,但由于某些原因,它会导致无限循环。我猜问题出在uri=playlist.next行中,如下所示。非常感谢您的帮助,以下是代码: //Request the user's information... $.ajax({ url: 'https://api.s
//Request the user's information...
$.ajax({
url: 'https://api.spotify.com/v1/me',
headers: {
'Authorization': 'Bearer ' + access_token
},
//... Create a list of the user's playlists
success: function(user) {
var playlistURL = 'https://api.spotify.com/v1/users/' + user.id + '/playlists';
appendPlaylists(playlistURL);
function appendPlaylists(nextURL) {
if (nextURL == null) {
return;
}
//Append playlists to the menu
$.ajax({
url: nextURL,
headers: {
'Authorization': 'Bearer ' + access_token
},
success: function(playlists) {
console.log(nextURL);
var i = 0;
while (playlists.items[i] != null) {
console.log(playlists.items[i].name);
$('.all-playlists').append('<option value="' + playlists.items[i].href + '">' + playlists.items[i].name + '</option>')
i++;
}
appendPlaylists(playlists.next);
}
});
}
//Load the logged in div.
$('#login').hide();
$('#loggedin').show();
}
});
//请求用户的信息。。。
$.ajax({
网址:'https://api.spotify.com/v1/me',
标题:{
“授权”:“承载人”+访问令牌
},
//…创建用户播放列表的列表
成功:功能(用户){
var playlayurl='1〕https://api.spotify.com/v1/users/“+user.id+”/播放列表”;
附加播放列表(播放URL);
功能附加播放列表(下一个){
if(nextURL==null){
返回;
}
//将播放列表附加到菜单
$.ajax({
网址:nextURL,
标题:{
“授权”:“承载人”+访问令牌
},
成功:功能(播放列表){
控制台日志(nextURL);
var i=0;
while(playlists.items[i]!=null){
console.log(playlists.items[i].name);
$('.all playlists').append(''+playlists.items[i].name+'')
i++;
}
追加播放列表(playlists.next);
}
});
}
//加载登录的div。
$('#login').hide();
$('#loggedin').show();
}
});
答案归于:
我认为问题在于,当ajax请求是异步的时,您认为它们是阻塞的。不要让请求出现在无限循环中,而是将请求发送到上一个请求的成功回调中的下一个块。创建一个函数,使请求接受偏移量(或“下一个”URL),然后在该函数内,当请求成功时,使用下一个块的URL调用自己
更新后的代码已添加到上述问题中。与问题无关:您将获得两次第一页。您是对的,我认为这样做有很好的理由,但事实证明我刚刚过度考虑了问题。谢谢。我将更新代码。我想问题在于您正在考虑将ajax请求作为一个整体king,当它们是异步的时。不要让请求在无限循环中,而是将请求发送到上一个请求的成功回调中的下一个块。创建一个函数,使请求接受偏移量(或者“下一个”URL,然后在该函数中,当请求成功时,使用下一个区块的URL调用自己。感谢您的回复!我不知道阻止和异步请求。这会被归类为递归吗?它似乎非常接近。我将更新上面的代码。