POST表单到新选项卡.输出格式为PDF

POST Form to new Tab. Output is PDF

本文关键字:输出 格式 PDF 选项 表单 新选项 POST      更新时间:2023-09-26

我正在写一个为用户生成一些PDF文档的网站。我需要做两件事。

1)当用户点击提交时,在新的选项卡中打开生成的PDF,该PDF在POST响应中返回。

2)对于某些请求,需要刷新原始页面以显示该PDF位于用户的库中。

我想出了这个JS。它正确地提交表单,将输出放在一个新选项卡中,并重新加载页面。

$.ajax({
    type: 'POST',
    url: '/share/pdf/',
    data: $('#pdf_share_form').serialize(),
    async: false,
    success: function (d) {
        var w = window.open();
        w.document.write(d);
        location.replace('/pdf/');
    }
});

问题是document.write()需要HTML,所以PDF显示为一堆二进制字符。

我觉得我需要指出数据应该下载时,写它,但我不知道如何去做。请注意,一些生成的文件是临时的,在从表单POST返回后立即删除,因此我不能执行任何形式的window.open(url)。

感谢@Remy,我对我需要做的事情有了更多的思考。在我写这个问题之前,我实际上有一个标准的jQuery submit()调用,窗体设置为target="_blank"。这工作得很好,但我在提交后重新加载页面时遇到了问题。这让我想到了$.ajax(),这是一个错误的解决方案。

解决方法很简单:

$.when($('#pdf_share_form').submit()).then(function() {
    location.replace('/pdf/');
});

<form id="pdf_share_form" action="/share/pdf/" target="_blank" method="post">
    <input id="pdf_index" name="pdf_index">
    <input id="pdf_name" name="pdf_name">
</form>