function getAudio(aUrl) {
var deferred = $.Deferred();
// ajax is not capable of arraybuffer
var xhr = new XMLHttpRequest();
xhr.responseType = 'arraybuffer';
xhr.open('GET', aUrl, true);
// request succeeded
xhr.onreadystatechange = function() {
if (
(xhr.readyState === 4) &&
(xhr.status === 200) &&
(xhr.status !== 404)
) {
audioCtx.decodeAudioData(xhr.response, function(buffer) {
buf = buffer;
return deferred.resolve(true);
});
}
};
xhr.onerror = function() {
return deferred.resolve(false);
};
xhr.send();
return deferred.promise();
}
В моем приложении есть функция для отправки XMLHttpRequest, тип ответа которого — «arraybuffer». Нет ошибки при использовании в Chrome, Safari, однако Firefox выдает мне ошибку «InvalidStateError: была предпринята попытка использовать объект, который не является или больше не может использоваться».
Многие учебники, кажется, имеют очень похожий код. Как это можно решить? Одно примечание: аргумент «aUrl» не является локальным путем. пример) "https://api.soundcloud.com/tracks/121818867/stream?client_id=8f474de4d1dedd5a6a4f4cbb60f4e6b8"
xhr.open()
должен быть помещен передxhr.responseType
в коде - в настоящее время это влияет только на Firefox; Хром или Опера работают нормально. - person spaffy   schedule 25.02.2015