我目前正在一个学校项目中,当我在网站上按下按钮时,我想让Spotify在某个位置播放特定歌曲,并且我创建了一个按钮,按下该按钮时会播放以下事件:
document.getElementById('play-song').addEventListener('click', function() {
$.ajax({
POST: 'https://api.spotify.com/v1/me/player/play',
headers: {
'Authorization': 'Bearer ' + access_token
},
data: {
'context_uri' : 'spotify:track:2iCcqggir1VUNIHfKDYKX9',
'position_ms' : 5000
}
})
}, false);
但是,每当我按下按钮时,什么都没有发生,控制台中也没有错误,Spotify也不会播放歌曲。我在这里做错什么了吗?
此代码的文档可以在这里找到:https://developer.spotify.com/documentation/web-api/reference/player/start-a-users-playback/
答案 0 :(得分:1)
我认为.then()将为您工作
document.getElementById('play-song').addEventListener('click', function() {
$.ajax({
POST: 'https://api.spotify.com/v1/me/player/play',
headers: {
'Authorization': 'Bearer ' + access_token
},
data: {
'context_uri' : 'spotify:track:2iCcqggir1VUNIHfKDYKX9',
'position_ms' : 5000
}}).then(function(data) {
if (data) {
// do other stuff
} else {
// do other stuff
}});
}, false);
答案 1 :(得分:1)
tl; dr:此答案底部的有效代码段!
您使用$.ajax()
的方式与Spotify端点的工作方式不对应。您的代码段正在生成一个GET
请求。不过,文档指出您要使用的端点需要PUT
。如您在代码段中所见,此问题已通过使用type: 'PUT'
进行了修复。为了传递URL,使用了url
键。
使用data
是正确的选择,尽管有一些不足之处。如果您像张贴那样使用它,则数据将作为formdata传输。这不是Spotify端点所期望的。您实际上需要在请求有效负载内传输数据。这可以通过使用dataType: "json"
和contentType: "application/json"
来实现。将JSON.stringify()
用于数据还可以解决与此问题有关的一些问题。
在请求有效负载中,您使用了context_uri
字段。这就是Spotify描述context_uri
字段的方式。
可选。 Spotify要播放的上下文的URI。有效的上下文是专辑,艺术家,播放列表。
因此,曲目不是上下文。因此,如果您想播放曲目,那么这不是您想要的领域。您的情况是需要uris
。这就是Spotify描述uris
字段的方式。
可选。要播放的Spotify曲目URI的JSON数组。
当只播放一首曲目时,仍然需要一个数组,如您在摘要中所见。
在这里您可以找到有效的代码段,我已在其中修复了AJAX呼叫。此代码段中使用的访问令牌必须至少包含user-modify-playback-state
范围。
$.ajax({
url: 'https://api.spotify.com/v1/me/player/play',
type: 'PUT',
headers: {
'Authorization': 'Bearer ' + access_token
},
dataType: "json",
contentType: "application/json",
data: JSON.stringify({
"uris": ["spotify:track:2iCcqggir1VUNIHfKDYKX9"],
"position_ms": 5000
})
});