我正在通过AJAX从我的SQL数据库中读取一个blob,下面的代码在FireFox,Edge和Chrome中工作正常但我在调试器中收到错误“无效状态错误” xmlhttp.responseType IE11中的“blob”; 。我已经为xmlhttp.responseType尝试了各种组合,但无法在IE11中使用它。例如,如果我只是注释掉 xmlhttp.responseType =“blob”; ,我会为 xmlhttp.responseType =“blob”; 行获取“类型不匹配错误”。并且想知道是否有人可以帮助我。这是我的html文件中用于发出ajax请求的代码:
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.responseType = "blob";
xmlhttp.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
theResponse=this.response;
theBlobSize=theResponse.size;
reader = new FileReader();
reader.addEventListener("loadend", function()
{
// get data from blob here
});
reader.readAsArrayBuffer(theResponse);
}
};
xmlhttp.open("POST","getImagAlgebraicBlob.php",true);
xmlhttp.send();
}
这里是php文件“getImagAlgebraicBlob.php”被调用来使用PDO读取blob并且非常简单并再次在其他浏览器中完美运行:
<?php
include 'algebraicFunctionBlobClass.php';
$blobObj = new algebraicFunctionBlob();
$a = $blobObj->selectImagBlob(132);
echo $a['imagWebGLData'];
?>
谢谢,
答案 0 :(得分:1)
IE6 / 5早已不复存在,所以你不需要为此做特殊处理
如果直接将responseType设置为arraybuffer,则不必使用FileReader ...
var xhr = new XMLHttpRequest
xhr.onload = function() {
var buffer = this.response
var size = buffer.byteLength
// construct the arraybuffer as a blob if you ever need it
// var blob = new Blob([buffer])
}
xhr.open('POST', 'getImagAlgebraicBlob.php')
xhr.responseType = 'arraybuffer'
xhr.send()