JavaScript从服务器获取二进制数据,responseType="arraybuffer",在ie上报错:InvalidStateError,求解答
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript从服务器获取二进制数据,responseType="arraybuffer",在ie上报错:InvalidStateError,求解答相关的知识,希望对你有一定的参考价值。
刚开始学Js,希望大神能帮一下:
代码在Chrom上成功,ie上不行:
function getByRequest(url)
var xhr = new XMLHttpRequest();
xhr.responseType = "arraybuffer";
xhr.open("GET", url, true);
xhr.overrideMimeType("text/plain; charset=x-user-defined");
xhr.onreadystatechange = function ()
if (xhr.readyState === 4 && xhr.status === 200)
arraybuffer = xhr.response;
dataView = new DataView(arraybuffer);
var building = resolve();
xhr.send(null);
ie上是有什么特殊写法吗?
要改为:
if(window.XMLHttpRequest)
var xhr=new XMLHttpRequest();
else if(window.ActiveXObject)
try
var xhr=new ActiveXObject("Msxml2.XMLHTTP");
catch(e)
try
var xhr= new ActiveXObject("Microsoft.XMLHTTP");
catch(e)
return "";
else
return "";
补充说明:IE不支持 XMLHttpRequest本回答被提问者和网友采纳
如何在 JavaScript ajax 调用中从 PHP passthru 获取二进制数据?
【中文标题】如何在 JavaScript ajax 调用中从 PHP passthru 获取二进制数据?【英文标题】:How can I get binary data from PHP passthru in JavaScript ajax call? 【发布时间】:2016-03-18 19:33:18 【问题描述】:我想用 JavaScript 从服务器获取音频文件并播放它。但是我的代码中的 ajax 调用似乎从来没有回调,我也不确定我是否正确处理了 JavaScript 中的音频。
以下 PHP 文件返回服务器上的音频文件:
<?php
header('Access-Control-Allow-Origin: *');
$name = './audiofiles/audio.wav';
$fp = fopen($name, 'rb');
header("Content-Type: binary");
header("Content-Length: " . filesize($name));
fpassthru($fp);
exit;
?>
使用 ajax 从 JavaScript 调用脚本,并在浏览器中重放返回的音频数据(至少应该是这样):
function playSample(e,q)
console.log("requesting audio from server")
$.ajax(
url: "https://audioserver.com/getaudio.php",
type: "GET",
dataType: "arraybuffer",
processData: false,
success: function(result)
console.log("received audio, starting to play now")
var buffers = result;
var newSource = audioContext.createBufferSource();
var newBuffer = audioContext.createBuffer( 2, buffers[0].length, 16000 );
newBuffer.getChannelData(0).set(buffers[0]);
newSource.buffer = newBuffer;
newSource.connect( audioContext.destination );
newSource.start(0);
);
我在这里做错了什么?
【问题讨论】:
【参考方案1】:jQuery ajax 不支持类型化响应,因此您将在成功回调中获取文本。
您可以使用纯 XMLHTTPRequest 获取二进制响应
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
if (this.readyState == 4 && this.status == 200)
//this.response is the array buffer for you to manipulate
xhr.open('GET', 'https://audioserver.com/getaudio.php');
xhr.responseType = 'arraybuffer';
xhr.send();
还有一个插件可以修补 jquery 以支持它https://github.com/acigna/jquery-ajax-native
您的音频处理代码也看起来不正确。 buffers[0]
没有意义,因为数组缓冲区没有数字属性
【讨论】:
我根据您的建议调整了我的代码,现在我收到一个错误,即音频无法解码。任何想法如何解决这个问题?在@Musa 上方查看我的编辑 @user2212461 请不要完全改变问题。你可以做两件事之一。 1. 提出一个新问题或 2. 在问题底部添加一个编辑部分,其中包含您所做的更改。 在这里添加了我的后续问题:***.com/questions/36093768/…@Musa以上是关于JavaScript从服务器获取二进制数据,responseType="arraybuffer",在ie上报错:InvalidStateError,求解答的主要内容,如果未能解决你的问题,请参考以下文章
使用 JavaScript/jQuery 从输入类型“文件”中获取二进制图像数据,以便在 WebMatrix 中使用 AJAX 进行图片预览 [重复]