如何解决Jquery Ajax 调用失败,数据类型为“二进制”,因为 responseType 值是数组缓冲区而不是文本
我必须执行 jquery ajax 调用才能下载文件。 url 指的是返回 HttpResponseMessage 的控制器方法,这方面没有任何问题(StatusCode 200,文件字节,一切正常)。
这里是ajax调用
$.ajax({
url: self.downloadAttachmentUrl,type: 'GET',cache: false,dataType: 'binary',data: {
fileKey: fileKey,userId: userId
},xhrFields: {
responseType: 'arraybuffer'
},beforeSend: function (xhr) {
Object.keys(customAjaxHeaders).forEach(function (headerName) {
var headerValue = customAjaxHeaders[headerName];
xhr.setRequestHeader(headerName,headerValue);
});
},success: function (data,textStatus,jqXHR) {
var fileName = self.getFileNameFromHeaders(jqXHR.getAllResponseHeaders());
var blob = new Blob([data],{ type: "application/octetstream" });
self.downloadFile(blob,fileName)
},error: function (jqXHR,message) {
console.error(textStatus,message);
}
})*/
DOMException: Failed to read the 'responseText' property from 'XMLHttpRequest': The value is only accessible if the object's 'responseType' is '' or 'text' (was 'arraybuffer').
我注意到如果我使用“本机 ajax”(所以没有 jQuery),我不会收到这个错误,但我不想使用它来保证项目的一致性(这很好密集)。
var headers = new Headers();
Object.keys(customAjaxHeaders).forEach(function (headerName) {
var headerValue = customAjaxHeaders[headerName];
headers.append(headerName,headerValue)
});
var init = {
method: 'GET',headers: headers
};
var fetchUrl = self.downloadAttachmentUrl + '?' + $.param({ fileKey: fileKey,userId: userId })
fetch(fetchUrl,init)
.then(async response => {
var blob = await response.blob();
var fileName = self.getFileNameFromHeaders(response.headers.get('Content-disposition'));
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.setAttribute('download',fileName);
link.click();
})
});
有没有办法让 jQuery ajax 调用正常工作?感谢您的帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。