Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加载.mp3文件时获取部分内容_Javascript_Php_Jquery_Apache - Fatal编程技术网

Javascript 加载.mp3文件时获取部分内容

Javascript 加载.mp3文件时获取部分内容,javascript,php,jquery,apache,Javascript,Php,Jquery,Apache,我有一个web应用程序,可以加载instagram图像并创建带有背景声音的幻灯片。加载图像时,会运行预加载程序来显示处理过程。但是它没有完全加载mp3文件,当我在浏览器控制台中检查时,它得到了206部分内容。因此,单击播放按钮时,我必须等待几秒钟,以便完全加载音乐以播放幻灯片 console.log('loading theme: ' + folder); $.ajaxSetup({ cache: false }); $.when(

我有一个web应用程序,可以加载instagram图像并创建带有背景声音的幻灯片。加载图像时,会运行预加载程序来显示处理过程。但是它没有完全加载mp3文件,当我在浏览器控制台中检查时,它得到了
206部分内容
。因此,单击播放按钮时,我必须等待几秒钟,以便完全加载音乐以播放幻灯片

 console.log('loading theme: ' + folder);
    $.ajaxSetup({
        cache: false
    });

    $.when(
            $.getScript(epic.getFrontendURL() + "animations/" + folder +  "/js/data.js"),
            $.getScript(epic.getFrontendURL() + "animations/" + folder + "/js/main.js"),
            $.Deferred(function (deferred) {
                $(deferred.resolve);
            })
        ).done(function () {
 //some methods
  sound_bg.src = epic.getFrontendURL() + "sound/back.mp3?
  });

因此,这与延迟处理的
done
有关。

这种行为是正常的。浏览器使用HTTP范围请求加载音频和视频文件以最小化带宽使用

如果希望浏览器预加载音频,请将音频元素上的
preload
属性设置为
auto

<audio src="..." preload="auto"></audio>

我找到了一种方法来检查是否有错误,如果有声音错误,您的网站将重新加载错误的声音,直到正确加载为止。这对我起了作用:

var sound1 = new Audio('sfx/1.mp3')
var sound2 = new Audio('sfx/2.mp3')
var sound3 = new Audio('sfx/3.mp3')

var soundChecker = setInterval(function() {
    if (sound1.error) {
        sound1 = new Audio('sfx/1.mp3')
    } else if (sound2.error) {
        sound2 = new Audio('sfx/2.mp3')
    } else if (sound3.error) {
        sound3 = new Audio('sfx/3.mp3')
    } else {
        clearInterval(soundChecker)
    }
}, 1500)
这将在每1.5秒加载一次声音时检查错误(您可以修改较慢连接的时间),如果加载的任何声音有错误,soundChecker将重新加载它们,直到成功加载所有声音(无错误)。如果成功加载所有声音,soundChecker间隔将自动清除并停止检查


您会注意到,诸如
net::ERR\u CACHE\u READ\u FAILURE 206(部分内容)
之类的错误仍将在控制台中打印,但声音会正常工作,因为在接下来的重新加载中,它被成功加载。

为什么在加载其他脚本之后需要设置
mp3
源代码,因为您似乎事先已经有了url?这些脚本加载了幻灯片的主题,所以在加载完后,我加载了mp3文件,但为什么它会得到部分内容,此外,后端服务器是Windows,在加载此标记中的音频后,不需要整个文件来开始流化。我是否继续像这样正常使用音频标签
const audio=new audio('source/a.mp3')audio.play()
。我想我还需要加载javascript,在这些标记之后播放我的音频?我尝试了我的想法,但在一些重新加载中,我仍然会遇到错误缓存读取失败206
浏览器使用HTTP范围请求加载音频和视频文件以最小化带宽使用。
你是什么意思?通过https加载音频无法工作?