我想下载一个jQuery ajax响应的pdf文件。 Ajax响应包含pdf文件数据。我尝试了这个solution。我的代码在下面给出,但我总是得到一个空白的pdf。
$(document).on('click', '.download-ss-btn', function () {
$.ajax({
type: "POST",
url: 'http://127.0.0.1:8080/utils/json/pdfGen',
data: {
data: JSON.stringify(jsonData)
}
}).done(function (data) {
var blob = new Blob([data]);
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "Sample.pdf";
link.click();
});
});
最佳答案
jQuery使用AJAX请求加载二进制数据时存在一些问题,因为它尚未实现某些HTML5 XHR v2功能,请参见enhancement request和discussion
鉴于此,您拥有以下两种解决方案之一:
第一个解决方案,放弃JQuery并使用XMLHTTPRequest
与本地HTMLHTTPRequest一起使用,这是执行所需操作的代码
var req = new XMLHttpRequest();
req.open("GET", "/file.pdf", true);
req.responseType = "blob";
req.onload = function (event) {
var blob = req.response;
console.log(blob.size);
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="Dossier_" + new Date() + ".pdf";
link.click();
};
req.send();
第二种解决方案,使用jquery-ajax-native插件
该插件可以在here中找到,并且可以用于JQuery中缺少的XHR V2功能,这是如何使用它的示例代码
$.ajax({
dataType: 'native',
url: "/file.pdf",
xhrFields: {
responseType: 'blob'
},
success: function(blob){
console.log(blob.size);
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="Dossier_" + new Date() + ".pdf";
link.click();
}
});