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

时间:2017-05-23 10:46:10

标签: ajax excel encoding

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

enter image description here

实际数据为橙色背景。收到的数据为黄色背景。

从差异文件看,它们看起来使用不同的编码格式。所以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) }
    });

请帮助解决此问题

1 个答案:

答案 0 :(得分:1)

“编码”的问题导致jQuery没有响应arraybuffer而是字符串。字符串使用JavaScript UTF-16,字符串中的二进制数据会导致麻烦。我建议你使用原生AJAX而不是jQuery。代码类似,浏览器支持与您使用的blob和对象URL的浏览器支持相同。

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)});