我有一个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;
});
答案 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调用返回二进制文件,则应该能够执行类似的操作。