javascript - 使用 jquery ajax 下载 pdf 文件

标签 javascript jquery ajax pdf

我想下载 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

使用 native 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();
  }
});

关于javascript - 使用 jquery ajax 下载 pdf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34586671/

相关文章:

javascript - 取消设置以相同子字符串开头的 Backbone.js 模型的所有属性

javascript - 如何检查用户是否已通过身份验证以访问特定路径(MEAN STACK)

jquery - 使用 footer_callback 对数据表页脚中的 1+ 列求和?

javascript - Ajax不发送数据到php文件

javascript - 如何在页面加载时增加浏览器缩放级别?

javascript - AngularJS 工厂服务未将动态数据返回到 Controller

jquery - jquery ajax 请求的 JSON 日期格式

jquery - 如何让一个 MutationObserver 监听多个元素的变化?

使用变量 url 提交的 jQuery AJAX

jquery - 使用 ajax 和 GET 搜索表单