我正在将PDF或XLSX文件返回到浏览器。我通过将发起请求的ajax对象的responseType设置为“ blob”来实现。这似乎可以根据需要工作。在找不到无法创建文件的情况下,无法找到一种将错误字符串传递给浏览器的好方法,我遇到了问题。
如果我没有在ajax对象上设置任何responseType,则可以读取响应文本作为设置的有意义的错误字符串。但是,这意味着在事情进行正常的情况下,我不再能够以PDF或XLSX文件的形式正确读取响应。而且,当然,我收到响应后就无法设置ajax对象的responseType。
控制器
public ActionResult GetFile() {
// process work, set stream and success bool
if (wasSuccessful) {
return File(stream, "application/pdf");
}
else {
return Content("a meaningful error for the UI");
}
}
cshtml
function getFile(e, extension) {
var xhr = new XMLHttpRequest();
xhr.open('POST', e.value, true);
xhr.responseType = 'blob';
xhr.setRequestHeader('Content-Type', "application/x-www-form-urlencoded");
xhr.onload = function (ee) {
if (this.status == 200) {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
var blob = new Blob([this.response], { type: 'octet/stream' }), url = window.URL.createObjectURL(blob);
a.href = url;
a.download = "file." + extension;
a.click();
window.URL.revokeObjectURL(url);
}
};
xhr.send($("#form").serialize());
}
我可以让我的Ajax期待一个Blob,但是在某些错误情况下以某种方式读取简单的字符串吗?