数据编码在ajax成功处理程序中是不同的

我正在使用AJAX从服务器下载excel文件。 但下载的数据与实际数据不同

在这里输入图像说明

实际数据是橙色背景。 收到的数据在黄色背景中。

从差异文件看,他们看起来像使用不同的编码格式。 所以excel会抛出文件格式不正确的错误。

$.ajax({ url: exporting.action, headers: { "Authorization": "Basic " + btoa("key : " + key) }, type: "post", responseType: "arraybuffer", success: function (res, status, obj) { var blob = new Blob([str2ab(res)], { type: obj.getResponseHeader('Content-Type') }); var objectUrl = URL.createObjectURL(blob); window.open(objectUrl); }, data: { 'Model': JSON.stringify(modelClone) } }); 

请帮忙解决这个问题

“编码”的麻烦是jQuery没有响应arraybuffer而是string。 string在JavaScript UTF-16和string中的二进制数据造成麻烦。 我build议你使用原生AJAX而不是jQuery。 代码是类似的,浏览器的支持和浏览器支持的blob和对象的URLs是一样的。

 var xhr = new XMLHttpRequest(); xhr.open("POST", exporting.action); xhr.setRequestHeader("Authorization", "Basic " + btoa("key : " + key)); xhr.responseType = "arraybuffer"; xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { var blob = new Blob([xhr.response], { type: xhr.getResponseHeader('Content-Type') }); var objectUrl = URL.createObjectURL(blob); window.open(objectUrl); } }.bind(this); xhr.send({ 'Model': JSON.stringify(modelClone)});