首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jQuery $.ajax或$.load是否允许responseType arrayBuffer?

jQuery $.ajax或$.load是否允许responseType arrayBuffer?
EN

Stack Overflow用户
提问于 2012-09-13 03:01:50
回答 3查看 22K关注 0票数 22

我开始使用Web Audio API,想知道是否可以使用jQuery的$.ajax或$.load函数来创建接收音频数据的XMLHttpRequest。$.ajax或$.load是否支持responseType=arrayBuffer?

编辑:

好的,这就是我到目前为止所知道的:

代码语言:javascript
复制
function loadAudio() {
    $.ajax({
            url: sourceUrl
        }).done(function(response){
            return response;
        })
    }

但我需要返回一个ArrayBuffer。那么如何将响应转换为ArrayBuffer呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-23 01:07:20

关于你的问题,似乎jQuery还不支持它。在按照我下面的建议使用它之前,请考虑检查该功能是否可用。

使用XHTMLRequest,您可以欺骗服务器并从服务器接收表示所需字节的二进制字符串。它工作得很完美。

代码语言:javascript
复制
var xhr = new XMLHttpRequest();
xhr.open('GET', '/your/audio/file.wav', true);

// Here is the hack
xhr.overrideMimeType('text/plain; charset=x-user-defined');

xhr.onreadystatechange = function(event) {
  if ( this.readyState == 4 && this.status == 200 ) {
    var binaryString = this.responseText;

    for (var i = 0, len = binaryString.length; i < len; ++i) {
      var c = binaryString.charCodeAt(i);
      var byte = c & 0xff; //it gives you the byte at i
      //Do your cool stuff...

    }
  }
};

xhr.send();

它很管用,很常见...但是..。它仍然是一个黑客。

使用XHTML请求级别2,您可以将responseType指定为“ArrayBuffer”并实际接收ArrayBuffer。它要好得多。问题是要检查您的浏览器是否支持此功能。

代码语言:javascript
复制
var xhr = new XMLHttpRequest();
xhr.open('GET', '/your/audio/file.wav', true);
xhr.responseType = 'arraybuffer';

xhr.onload = function(e) {
  if (this.status == 200) {
    //Do your stuff here
  }
};

xhr.send();

希望我能帮上忙。

票数 21
EN

Stack Overflow用户

发布于 2022-01-31 15:19:30

我使用了Dylan's answer,它可以工作,但生成的$.ajax请求不再是一个完整的承诺(我不能再将其与Promise.all结合使用)。相反,我通过使用文档中的xhrFields设置实现了同样的目的。

代码语言:javascript
复制
$.ajax({
    url: url,
    method: 'GET',
    xhrFields: { responseType: 'arraybuffer'}
})
票数 2
EN

Stack Overflow用户

发布于 2020-01-16 16:39:19

为此有一个简单的jQuery扩展:https://github.com/vobruba-martin/jquery.ajax.arraybuffer

代码语言:javascript
复制
$.get("https://www.website.com/image.png", function(data)
{
    console.log("received data", data);
}, "arraybuffer");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12394622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档