Javascript 每秒从API更新数据

Javascript 每秒从API更新数据,javascript,html,ajax,api,Javascript,Html,Ajax,Api,我目前正在为一个学校项目工作,在那里我正在使用SpotifyAPI。现在我已经收到了目前有人正在听的歌曲 但问题是,信息只在站点刷新或打开后才会被接收,但我希望它能保持每秒刷新一次(而不是刷新整个页面),以便侦听器能够及时更新信息。这里有人知道我怎样才能做到吗 这是我正在使用的AJAX请求(我不确定它是否有用) 如果有任何其他代码,我需要张贴,以帮助,请让我知道 您可以设置setInterval。它将在每定义秒调用一个函数 setInterval(function(){ callAjax(

我目前正在为一个学校项目工作,在那里我正在使用SpotifyAPI。现在我已经收到了目前有人正在听的歌曲

但问题是,信息只在站点刷新或打开后才会被接收,但我希望它能保持每秒刷新一次(而不是刷新整个页面),以便侦听器能够及时更新信息。这里有人知道我怎样才能做到吗

这是我正在使用的AJAX请求(我不确定它是否有用)


如果有任何其他代码,我需要张贴,以帮助,请让我知道

您可以设置
setInterval
。它将在每定义秒调用一个函数

setInterval(function(){
   callAjax();
}, 1000);

var callAjax = function(){
  // Write you ajax here
}

您可以使用setTimeout或setInterval来实现这一点

不同之处在于setInterval在指定的时间间隔内一次又一次地执行给定的函数(直到调用clearInterval()函数);setTimeout在指定的时间间隔后执行给定函数一次

完成响应的必要过程后。可以在函数末尾递归调用makerequest()函数。行includescomment提供了makerequest()函数,可在10秒后再次调用

function makerequest() {
    $.ajax({
        url: 'https://api.spotify.com/v1/me/player/currently-playing',
        headers: {
            'Authorization': 'Bearer ' + access_token
        },
        success: function(response) {
            userInfoPlaceholder.innerHTML = userInfoTemplate(response);
            console.log(response);
            $('#login').hide();
            $('#loggedin').show();
            //process with the response and other stuffs
            setTimeout(makerequest, 10000); //recursive call
        }
    });

}

您可以使用每隔x毫秒运行一次代码。请将上述代码包装到函数中,然后设置以使函数以您设置的频率重复执行。提示:每秒一次可能太频繁了——很有可能在触发下一个请求之前,您甚至没有收到对上一个请求的响应。数据很有可能会无序到达,或者页面性能开始下降,或者服务器会阻止您向其发送垃圾邮件请求。可能重复“您可以在函数末尾递归调用makerequest()函数”。。。你应该展示一个例子,然后我们有一个完整的解决方案。谢谢你的更新。但是,代码不会等到上一个调用完成后再发出下一个请求。它在启动ajax请求后立即启动超时。如果您想让它等到ajax完成后再重新启动计时器,那么必须将对“setTimeout”的调用放在“success”回调中。否则,使用timeout是毫无意义的,您可以使用setInterval来代替。谢谢您的更正ADyson。此外,我还纠正并详细说明了我对差异的解释。
function makerequest() {
    $.ajax({
        url: 'https://api.spotify.com/v1/me/player/currently-playing',
        headers: {
            'Authorization': 'Bearer ' + access_token
        },
        success: function(response) {
            userInfoPlaceholder.innerHTML = userInfoTemplate(response);
            console.log(response);
            $('#login').hide();
            $('#loggedin').show();
            //process with the response and other stuffs
            setTimeout(makerequest, 10000); //recursive call
        }
    });

}