我目前无法停止通过 ajax 调用在服务网页上播放音频

Posted

技术标签:

【中文标题】我目前无法停止通过 ajax 调用在服务网页上播放音频【英文标题】:I cant stop currently playing audio on served webpages via ajax calls 【发布时间】:2019-02-13 17:05:50 【问题描述】:

我设计了一个 pub quiz 页面,它可以按照我的意愿运行。对于音频回合,我想播放所有玩家都能听到的声音。这样可行。但是当我点击停止时,它会在我的浏览器实例中停止,而不是在播放器页面中。

我正在使用 php 从测验母版页面生成的 txt 文件。使用 ajax 每秒读取这些文件,并在播放器页面上更改输出时更改输出。我所有的代码都可以工作,甚至可以触发新的声音事件。但是一旦在播放器浏览器中播放音频事件,我就无法阻止它。 我的 php 正在创建文本文件 - 单击停止时的空白条目。当我更改文本文件时,会播放一个新的音频剪辑。 我尝试添加 aud.stop();在通话开始时,但它会阻止任何音频播放。

<script>
function updateq()
    $.ajax(url: '<?php echo $baseurl."curquestion.txt"; ?>',  ifModified: true, success: function(result, status)
    if (status === 'success')  $('#cq').html(result); 
    );
    $.ajax(url: '<?php echo $baseurl."playaudio.txt"; ?>',  ifModified: true, success: function(result, status)
    if (status === 'success')  var aud = new Audio(result);    aud.play();
    
   );
    setTimeout('updateq()',1000);
;
</script>
<script type="text/javascript">  
$(document).ready(
function() 
    
     updateq();
    );
</script>

当我的 playaudio.txt 从有效的 mp3 文件名更改为“”时,我希望音频会停止。但是一旦在播放器网络浏览器中触发,一旦播放了音频文件,它就会一直播放到完成或页面刷新。加载网页时音频事件似乎重叠。

【问题讨论】:

【参考方案1】:

我认为问题在于范围。播放音频的 var 在加载下一个时不存在,因此您无法停止它。不妨试试这样的。

<script>
var lastAud = null;
function updateq()
    $.ajax(url: '<?php echo $baseurl."curquestion.txt"; ?>',  ifModified: true, success: function(result, status)
    if (status === 'success')  $('#cq').html(result); 
    );
    $.ajax(url: '<?php echo $baseurl."playaudio.txt"; ?>',  ifModified: true, success: function(result, status)
    if (status === 'success') 
      if(lastAud && lastAud.src != result) 
           location.reload();
      

      aud = new Audio(result);
      aud.play();
      lastAud = aud;
    
   );
    setTimeout('updateq()',1000);
;
</script>
<script type="text/javascript">  
$(document).ready(
function() 
    
     updateq();
    );
</script>

【讨论】:

一个小的屠宰工作,我得到了我的解决方案 - 将变量传回是关键。而不是 aud.stop(); - 这没有用,我做了一个 location.reload();你给了我找到这个解决方案的灵感!!谢谢先生。 没问题,很高兴我能帮上忙!我批准了您建议的修改,祝您编码愉快!

以上是关于我目前无法停止通过 ajax 调用在服务网页上播放音频的主要内容,如果未能解决你的问题,请参考以下文章

通过 Jquery 启动/停止 Ajax 调用

停止播放通过 SoundEffect.FromStream 调用的声音

JQuery 按钮未通过 ajax 触发服务调用

使用 AJAX 加载内容后无法播放音频

尽管有索引,但网页加载缓慢 ajax 查询检索时间过长

使用Youtube API通过播放另一个来停止视频