Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将表单发布到新选项卡。输出为PDF格式_Javascript_Jquery_Pdf - Fatal编程技术网

Javascript 将表单发布到新选项卡。输出为PDF格式

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

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

1) 当用户单击submit时,生成的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=“\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
,通常会有更好的方法: