创建Blob期间Internet Explorer 11中的InvalidStateError

Thu*_*jir 4 javascript

我在blob创建行(即11)上收到InvalidStateError。不用说,它可以在Chrome和Firefox中使用。我可以看到二进制数据是我的客户端。是否有其他选择可以将其下载为文件?

var request= new ActiveXObject("MicrosoftXMLHTTP");
request.open("post", strURL, true);
request.setRequestHeader("Content-type","text/html");
addSecureTokenHeader(request);
request.responseType = 'blob';


request.onload  = function(event) {
if (request.status == 200) {
var blob = new Blob([request.response], {type: 'application/pdf'});
var url = URL.createObjectURL(blob);

var link = document.querySelector('#sim');
link.setAttribute('href', url);
var filename =  request.getResponseHeader('Content-Disposition');
$('#sim').attr("download", filename);
$(link).trigger('click');
fireEvent(link,'click');

}else {
//handle error
}
}
Run Code Online (Sandbox Code Playgroud)

Lar*_*kås 8

在实例化XmlHttpRequest对象之后立即通过设置xhr.responseType =“ blob”获得InvalidStateError之后,移动

xhr.responseType = "blob" 
Run Code Online (Sandbox Code Playgroud)

xhr.onloadstart = function(ev) {
    xhr.responseType = "blob";
}
Run Code Online (Sandbox Code Playgroud)

为我解决了!:)


And*_*eiC 3

这不是一个优雅的方式,但它适用于 IE8 - IE11:

var myForm = document.createElement("form");

myForm.method = "POST";
myForm.action = strURL;
myForm.target = "_blank";

var myInput = document.createElement("input");
myInput.type = "text";
myInput.name = "sim";
myInput.value = JSON.stringify(/*data to post goes here*/);
myForm.appendChild(myInput);

document.body.appendChild(myForm);
myForm.submit();
$(myForm).hide();
Run Code Online (Sandbox Code Playgroud)