Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从nodejs中的Spotify API获取每页播放列表_Javascript_Jquery_Json_Node.js_Spotify - Fatal编程技术网

Javascript 如何从nodejs中的Spotify API获取每页播放列表

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

我试图从spotify API中获取用户的所有播放列表,并将其放入选择列表中。我一次只能访问20个播放列表,因此我创建了一个while循环,使用next page属性遍历播放列表的每一页,但由于某些原因,它会导致无限循环。我猜问题出在uri=playlist.next行中,如下所示。非常感谢您的帮助,以下是代码:

        //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调用自己。感谢您的回复!我不知道阻止和异步请求。这会被归类为递归吗?它似乎非常接近。我将更新上面的代码。