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 调用正常工作?感谢您的帮助。

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

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/392501.html

大家都在问