在请求后等待在 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 中发送另一个的主要内容,如果未能解决你的问题,请参考以下文章

基于jQuery实现的Ajax(Django环境)

http请求和多线程

PHP & jQuery ajax 调用无需等待响应

异步方式

如何让 Javascript 在发送请求之前等待 Promise?

同步异步和阻塞非阻塞