根据AJAX POST请求发送的JSON创建和下载PDF

时间:2019-05-20 15:25:16

标签: javascript java ajax

我正在尝试使用基于客户端的JSON的iText创建PDF文件。 HTML表单数据不适合我,因为它编码JSON,并且在某些浏览器中无法正常工作,因此我尝试改用AJAX。但是毕竟我得到了一个空的PDF文件。

我尝试使用以下内容:

            that.parsedEstimator = JSON.stringify(json); //target object
            $.ajax({
                type: "POST",
                url: "<SERVLET_PATH>",
                contentType: "application/json",
                cache: false,
                data: that.parsedEstimator,
                success: function (data) {
                    a = document.createElement('a');
                    var binaryData = [];
                    binaryData.push(data);
                    a.href = window.URL.createObjectURL(new Blob(binaryData, {type: "application/pdf"}));
                    a.download = "Estimation.pdf";
                    a.style.display = 'none';
                    document.body.appendChild(a);
                    a.click();
                }
            });

servlet进行了响应处理

response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=Estimation.pdf");

我应该怎么做才能解决此问题?

非常感谢。

1 个答案:

答案 0 :(得分:1)

responseType设置为blob可以达到目的,将xhrFields: {responseType: "blob"}添加到现有代码中,

          $.ajax({
                type: "POST",
                url: "<SERVLET_PATH>",
                contentType: "application/json",
                cache: false,
                data: that.parsedEstimator,
                xhrFields: {responseType: "blob"},
                success: function (data) {
                    a = document.createElement('a');
                    var binaryData = [];
                    binaryData.push(data);
                    a.href = window.URL.createObjectURL(new Blob(binaryData, {type: "application/pdf"}));
                    a.download = "Estimation.pdf";
                    a.style.display = 'none';
                    document.body.appendChild(a);
                    a.click();
                }
            });