Javascript 通过按钮发送播放曲目的命令

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

我目前正在进行一个学校项目,我想让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也不会播放歌曲。我做错什么了吗

这段代码的文档可以在这里找到:

我想.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阻止其他明智的控制台检查并确定你自己的条件。非常感谢你的回答,我真的很感谢你的解释,因为这是我学习新知识的项目中最重要的部分!