Ajax请求接收二进制数据

时间:2014-03-26 16:38:26

标签: javascript jquery ajax download

我有一个ajax请求,它上传文件和其他一些数据,解析它,然后以xls格式下载。我目前使用ajax正确上传文件,但是当调用成功函数时,它会将二进制数据作为参数' data'来接收。我想获取这些数据并使用它创建一个文件,并将其呈现给用户,就像它已被下载一样。这可能吗?这是我的ajax请求。

$("#fileForm").submit(function(){
    var fileData = $("#fileInputElmt").prop("files")[0];
    var data = new FormData();
    data.append("upload",fileData);
    var url = "process.action?" + $("#fileForm").serialize();
    console.log(url);
    console.log(data);
    $.ajax({
        type: "POST",
        url:url,
        data:data,
        cache:false,
        contentType:false,
        processData:false,
        success:function(data){
            console.log("success"+data);
            hideProgressBar();
        },error:function(data){
            console.log("error "+data);
            hideProgressBar();
        }
    });
    return false;
});

1 个答案:

答案 0 :(得分:2)

您正在寻找类似的东西。

function downloadPDF() {

var xhr = new XMLHttpRequest();
xhr.open('POST', API_URL, true);
xhr.responseType = 'arraybuffer';

xhr.onload = function(e) {
    if (this.status == 200) {
        var bb = new window.WebKitBlobBuilder();
        bb.append(this.response); // Note: not xhr.responseText

        var blob = bb.getBlob('application/pdf');
        var blobURL = window.webkitURL.createObjectURL(blob);

        window.open(blobURL);
    }
};

xhr.send(createRequest());
}

仅适用于较新的浏览器,Chrome IE9 +等...

该示例使用xhr,但如果您的ajax调用返回二进制文件,则应该能够执行类似的操作。