微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Jquery Ajax 调用失败,数据类型为“二进制”,因为 responseType 值是数组缓冲区而不是文本

如何解决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 举报,一经查实,本站将立刻删除。