Javascript 如何使用同步ajax请求将音频转换为arrayBuffer?

Javascript 如何使用同步ajax请求将音频转换为arrayBuffer?,javascript,ajax,html5-audio,Javascript,Ajax,Html5 Audio,最后一个参数是声明它是否同步的位置。由于某种原因,当我将其设为false时,您无法将其responseType更改为arraybuffer 这会破坏该方法,因为它不是arraybuffer,无法读取响应。这是令人惊讶的自然行为 req.open("GET", url[i], true) 我对此做了一些研究,但我只找到了将字符串转换为数组缓冲区的方法。在本例中,我将音频(如mp3格式)转换为arraybuffer,同时保持请求同步。 有什么解决办法吗?从标准方面来说。虽然有传言说同步请求可能会

最后一个参数是声明它是否同步的位置。由于某种原因,当我将其设为false时,您无法将其responseType更改为arraybuffer

这会破坏该方法,因为它不是arraybuffer,无法读取响应。这是令人惊讶的自然行为

req.open("GET", url[i], true) 
我对此做了一些研究,但我只找到了将字符串转换为数组缓冲区的方法。在本例中,我将音频(如mp3格式)转换为arraybuffer,同时保持请求同步。
有什么解决办法吗?

从标准方面来说。虽然有传言说同步请求可能会在未来的规范中被禁用,但支持它的新特性并不出人意料。检查

XMLHttpRequest2规范最近更改为在设置xhr.responseType时禁止发送同步请求

这是:

如果async为false,则存在关联的XMLHttpRequest文档,并且超时属性值不是零,withCredentials属性值为true,或者responseType属性值不是空字符串,则引发InvalidAccessError异常并终止这些步骤


从应用程序方面。使用ArrayBuffer通常意味着您请求的资源在某种程度上是一个大的二进制文件。虽然同步请求会阻塞UI,但这确实是糟糕的用户体验。因此,即使你可以这样做,这也不是一个好主意。

也许这是不可能的。这甚至可能是有意为之——强烈反对同步执行ajax,但我真的看不出它有什么害处吗?它只是简单的XMLHttpRequests和转换成audioBuffer。危害在于执行同步操作会在等待期间挂起浏览器,包括分流任何当前呈现的audioAh。我懂了。谢谢你的提示。我试图在执行代码之前先加载所有文件,因为存在依赖于文件的代码。如果在加载未完成之前执行,文件将显示为未定义。@user43353您可能需要一个资源管理工具,就像大多数HTML游戏一样。
req.open("GET", url[i], true) 
context.decodeAudioData(req.response, function(buffer){});