在请求后等待在 JQuery 中发送另一个
Posted
技术标签:
【中文标题】在请求后等待在 JQuery 中发送另一个【英文标题】:Wait after request to send another one in JQuery 【发布时间】:2017-12-14 09:19:48 【问题描述】:我正在使用 spotify WEB API,想法是在单击下一首歌曲按钮时使用歌曲名称更新 html。
问题是,当我单击按钮时,它确实会更新歌曲,但会更新到最后播放的歌曲,而不是当前播放的歌曲。
我尝试使用其他方式,例如“成功”和“完成”参数,但是当使用“完成”时它不会更新,并且在“成功”时也会发生同样的情况。
我是否可以为下一个请求设置“等待”时间?
document.getElementById('skip-song').addEventListener('click', function()
$.ajax(
type: 'POST',
url:'https://api.spotify.com/v1/me/player/next',
headers: 'Authorization': "Bearer " + access_token,
).done(function(data)
$.ajax(
url: 'https://api.spotify.com/v1/me/player/currently-playing',
headers:
'Authorization': 'Bearer ' + access_token
,
).done(function(response)
currentPlayingPlaceholder.innerHTML = currentPlayingTemplate(response);
);
);
, false);
【问题讨论】:
一般来说,最好不要混淆 vanilla JS 和 jQuery。如果你使用 jQuery 和 AJAX,那么在任何地方都使用 jQuery:$("#previous-song").click(function() ... )
用于事件,$currentPlayingPlaceholder.html(...)
用于更改 HTML 等。
真的不清楚是什么问题。在第一个请求完成之前,不会发出第二个请求。但是你不会对从第一个返回的数据做任何事情
您的方法对我来说看起来不错,我唯一注意到的是,您在第二个请求中缺少type: 'POST'
问题是“当我点击下一首歌曲按钮时”。然而,代码都是关于“上一首”歌曲的。是错字,还是代码中的逻辑错误?
那么问题在于,在 Spotify API 识别出当前播放的歌曲发生变化之前,您的第二个请求已发出并得到响应?
【参考方案1】:
通过引入超时,您可以在请求当前播放的歌曲之前等待几秒钟。不知道要等多久,感觉有点hacky
。如果跳过函数返回当前正在播放会很好......
document.getElementById('previous-song').addEventListener('click', function()
$.ajax(
type: 'POST',
url: 'https://api.spotify.com/v1/me/player/previous',
headers:
'Authorization': "Bearer " + access_token
,
).done(function(data)
setTimeout(
$.ajax(
url: 'https://api.spotify.com/v1/me/player/currently-playing',
headers:
'Authorization': 'Bearer ' + access_token
,
).done(function(response)
currentPlayingPlaceholder.innerHTML = currentPlayingTemplate(response);
), 3000); //wait 3 seconds before updating the currently playing
);
, false);
【讨论】:
以上是关于在请求后等待在 JQuery 中发送另一个的主要内容,如果未能解决你的问题,请参考以下文章