Javascript 将表单发布到新选项卡。输出为PDF格式
我正在写一个网站,为用户生成一些PDF文档。我需要做两件事 1) 当用户单击submit时,生成的PDF(在POST响应中返回)应在新选项卡中打开 2) 对于某些请求,需要刷新原始页面以显示此PDF在用户的库中 我想出了这个JS。它确实正确地提交了表单,将输出放在新的选项卡中,然后重新加载页面Javascript 将表单发布到新选项卡。输出为PDF格式,javascript,jquery,pdf,Javascript,Jquery,Pdf,我正在写一个网站,为用户生成一些PDF文档。我需要做两件事 1) 当用户单击submit时,生成的PDF(在POST响应中返回)应在新选项卡中打开 2) 对于某些请求,需要刷新原始页面以显示此PDF在用户的库中 我想出了这个JS。它确实正确地提交了表单,将输出放在新的选项卡中,然后重新加载页面 $.ajax({ type: 'POST', url: '/share/pdf/', data: $('#pdf_share_form').serialize(), asy
$.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=“\u 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>
$.when($('#pdf_share_form').submit()).then(function()){
位置。替换('/pdf/');
});
您使用ajax提交此文件而不是在新选项卡中提交常规表单,这有什么原因吗?我想可能会对您有所帮助。@Ramy,我需要能够指定async:false
才能打开新选项卡,读取数据,然后重新加载页面。多亏了你的建议,我找到了$.when()
,并想出了一个非常有效的解决方案。很高兴我间接地提供了帮助。根据经验:如果您决定对ajax调用使用async:false
,通常会有更好的方法: