我在下面的 XMLHttpRequest 对象的行为很奇怪,但是我不确定我是否正确使用它。首先,我需要按照此处的说明在我的 S3 服务器上允许跨域请求。
接下来,我编写了.open
方法来访问我的 Amazon S3 服务器并GET
在名为“Superman”的 mp3 上执行。这似乎没有错误发生,但是这console.log
几行下来
console.log("Current 'request.response' value");
console.log(request.response);
表明request.response
是null
。但是.. 在request.onload
函数中,request.response
传入的对象由该console.log
语句显示为 type AudioBuffer
。
console.log("Inside 'request.onload' function");
console.log(buffer);
这是这两个语句的控制台输出的屏幕截图。
但是..当我尝试在该.onload
方法中播放 mp3 时,下面屏幕截图中的第 205 行会引发突出显示的错误。
我的问题是,我是否使用 XMLHttpRequest 对象并且它的功能正常,如果是,为什么会出现此错误?request.response
我需要在方法之前或之后运行某种转换.onload
吗?
var request = new XMLHttpRequest();
request.open('GET', 'http://s3.amazonaws.com/tracks/Superman.mp3', true);
request.responseType = 'arraybuffer';
console.log("Current 'request.response' value");
console.log(request.response);
request.onload = function() {
context.decodeAudioData(request.response, function(buffer){
console.log("Inside 'request.onload' function");
console.log(buffer);
var source = context.createBufferSource();
source.buffer = buffer.byteLength;
source.connect(context.destination);
source.start(0);
}