我正在撰写一个为用户生成一些PDF文档的网站。我需要做两件事。
1)当用户点击提交时,应在新选项卡中打开在POST响应中返回的生成的PDF。
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)。
答案 0 :(得分:0)
感谢@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>