无法通过IE 11中的FileReader读取SQL blob

时间:2016-11-02 16:29:18

标签: javascript php sql ajax

我正在通过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'];
?>

谢谢,

1 个答案:

答案 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()