Javascript 通过按钮发送播放曲目的命令
我目前正在进行一个学校项目,我想让Spotify在网站上按下按钮时在特定位置播放特定歌曲,我创建了一个按钮,按下按钮时播放以下事件:Javascript 通过按钮发送播放曲目的命令,javascript,jquery,api,spotify,Javascript,Jquery,Api,Spotify,我目前正在进行一个学校项目,我想让Spotify在网站上按下按钮时在特定位置播放特定歌曲,我创建了一个按钮,按下按钮时播放以下事件: document.getElementById('play-song').addEventListener('click', function() { $.ajax({ POST: 'https://api.spotify.com/v1/me/player/play', headers: { 'Authorization
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也不会播放歌曲。我做错什么了吗
这段代码的文档可以在这里找到:我想.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);
tl;dr:答案底部的工作片段强>
您使用
$.ajax()
的方式与Spotify端点的工作方式不一致。您的代码段正在生成一个GET
请求。不过,文档中指出,要使用的端点需要PUT
。正如您在代码段中所看到的,这是通过使用键入:'PUT'
修复的。为了传递URL,使用URL
键
使用
数据
是正确的选择,尽管还缺少一些东西。如果您像发布一样使用它,则数据将作为formdata传输。这不是Spotify的端点所期望的。实际上,您需要在请求负载内传输数据。这是通过使用dataType:“json”
&contentType:“application/json”
实现的。对数据使用JSON.stringify()
也可以解决与此问题相关的一些问题
在请求有效负载中,您使用了
上下文uri
字段。Spotify就是这样描述上下文uri
字段的
可选。Spotify要播放的上下文的URI。有效的上下文是相册、艺术家、播放列表
因此,轨迹不是上下文。因此,如果你想玩一个轨道,这不是你想去的领域。在您的情况下,需要uri
。Spotify就是这样描述URI
字段的
可选。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
})
});
我要在“如果”和“其他”中加什么?.then()上方“data:”后面的数据表示轨迹uri和位置。我是否必须将其放入if?直接控制台数据删除if阻止我表示歉意,但我似乎不知道如何才能做到这一点。你的意思是我必须使用console.log(数据)?返回的内容取决于你的API,如果API返回true和false,那么你可以使用if else阻止其他明智的控制台检查并确定你自己的条件。非常感谢你的回答,我真的很感谢你的解释,因为这是我学习新知识的项目中最重要的部分!