Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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
Php TCPDF-AJAX-从AJAX调用下载文件而不将其保存到web服务器_Php_Jquery_Ajax_Pdf_Tcpdf - Fatal编程技术网

Php TCPDF-AJAX-从AJAX调用下载文件而不将其保存到web服务器

Php TCPDF-AJAX-从AJAX调用下载文件而不将其保存到web服务器,php,jquery,ajax,pdf,tcpdf,Php,Jquery,Ajax,Pdf,Tcpdf,我对create_pdf.php页面进行了AJAX调用: $('body').on('click', '.PrintButtonWithClass', function (event) { var1 = $('#id1').val(); var2 = $('#id2').val(); dataString='var1='+var1+'&var2='+var2+'&pdf_name=PdfName&pdf_creator=myname';

我对
create_pdf.php
页面进行了AJAX调用:

$('body').on('click', '.PrintButtonWithClass', function (event) {
    var1 = $('#id1').val();
    var2 = $('#id2').val();
    dataString='var1='+var1+'&var2='+var2+'&pdf_name=PdfName&pdf_creator=myname';

    $.ajax({ 
        type: 'post',
        url: '/path/to/createpdf/file/create_pdf.php',
        data: dataString,
        success: function (data) {
            alert('success');
        }
    });
});
create_pdf.php
中,我尝试使用此行下载文件:

$pdf->Output(str_replace(' ','_',utf8_decode($_POST['pdf_name'])).'.pdf', 'D');
我还尝试了
FD
I
参数,但没有成功,文件无法下载

如何强制下载创建的文件而不将其保存到Web服务器,也不将用户重定向到任何其他页面?我希望他保持在同一个页面上,浏览器会弹出一个PDF的(下载或预览对话框)。有什么办法吗


编辑:create_pdf.php正在等待POST变量。并使用它们为pdf创建HMTL。

您可以尝试将表单提交到新窗口(如弹出窗口):

不要忘记从php发送内容类型标题:

header("Content-Type", "application/pdf");
编辑: 浏览器应显示您的pdf内容,并显示下载或打印选项。
代码没有经过测试,但我认为它可以满足您的要求

我找到了解决问题的办法

我在另一个
AJAX
调用中执行了
AJAX
调用

第一个
AJAX
调用在webServer上创建文件,并在新窗口中打开该文件

在他的成功参数中,我执行以下操作:

第二个
AJAX
调用从服务器删除文件

            $.ajax({ 
                type: 'post',
                url: '/path/to/create_pdf.php',
                data: dataString,
                success: function (data) {

                window.open(
                  data,
                  '_blank' // <- This is what makes it open in a new window.
                );


                window.setTimeout(function () {
                    dataString2 = 'Downloaded=true';
                            $.ajax({
                                type: 'post',
                                url: '/path/to/create_pdf.php',
                                data: dataString2,
                                success: function (data) { alert(data); }, // handler if second request succeeds 
                            });
                }, 5000);



                    },

                  });
$.ajax({
键入:“post”,
url:“/path/to/create_pdf.php”,
数据:dataString,
成功:功能(数据){
打开窗户(
数据,

“_blank”/使用此答案回答我的类似请求:

我需要(1)在另一个窗口中获取并显示pdf;以及 (2) 获取CSV文件并提示保存

页面()上的每个按钮都有2个简单的按钮。下面是代码:

function getCSVText(evt)  {

  if (currentChecklistCountry)  {

    var form = $('<form method="post" action="../php/sendCSV.php?country=' + currentChecklistCountry + '"></form>');

    $('body').append(form);

    form.submit();

    form.remove();
  }
  else  checklistCountryButton.classList.add("needsAttention");
}

function openChecklistPage()  {

   if (!currentChecklistCountry)  {
       checklistCountryButton.innerHTML = "Select Country";
       checklistCountryButton.classList.add("needsAttention");
       return;
    }

   if (gNumDays == undefined) gNumDays = 12;

   vars = "?country="     + currentChecklistCountry;
   vars += "&num_days="   + gNumDays;
   vars += "&line_nos="   + lineNumbers.checked;
   vars += "&left_check=" + leftCheck.checked;
   vars += "&endemics="   + showEndemics.checked;
   vars += "&sci_names="  + !sciNames.checked;
   vars += "&italics="    + !italics.checked;

   window.open( '../php/makePDF.php' + vars, '_blank' );
}
函数getCSVText(evt){ 如果(currentChecklistCountry){ 变量形式=$(''); $('body')。追加(表格); 表单提交(); form.remove(); } else checklistcrybutton.classList.add(“needsatention”); } 函数openChecklistPage(){ 如果(!currentChecklistCountry){ checklistCountryButton.innerHTML=“选择国家”; checklistCountryButton.classList.add(“needsAttention”); 返回; } 如果(gNumDays==未定义)gNumDays=12; vars=“?country=“+currentChecklistCountry; 变量+=”&num_days=“+gNumDays; vars+=”&行号=“+lineNumbers.checked; vars+=”&left_check=“+leftCheck.checked; vars+=“&endemics=“+showEndemics.checked; vars+=”&sci_names=“+!sciNames.checked; vars+=“&italics=“+!italics.checked; open('../php/makePDF.php'+vars,“\u blank”); }

因此getCSVText()方法使用附加的临时表单下载一个文件,然后立即删除,以及openChecklistPage()成功打开另一个包含pdf文件的浏览器窗口。该pdf文件从未保存在服务器上。CSV文件已存储在服务器上并刚被检索。也许您可以修改代码以满足自己的需要。

我不提交任何表单,我只有一个“打印”按钮,单击该按钮时会调用AJAX,不提交任何表单。我只获取所有信息我需要当前页面中的信息并将其发送到create_pdf.phpy您可以创建一个动态表单,可以在按下按钮时提交。创建如下输入:
var fields=$(“”,{name:'var1',type:'text'});$(“”,{target:'.\u foo',method:'post'})。追加(字段)。提交();
请查看此页面:。它主要恢复到我以前的评论。忘记提到您必须在“按钮单击回调”中添加表单创建代码。
            $.ajax({ 
                type: 'post',
                url: '/path/to/create_pdf.php',
                data: dataString,
                success: function (data) {

                window.open(
                  data,
                  '_blank' // <- This is what makes it open in a new window.
                );


                window.setTimeout(function () {
                    dataString2 = 'Downloaded=true';
                            $.ajax({
                                type: 'post',
                                url: '/path/to/create_pdf.php',
                                data: dataString2,
                                success: function (data) { alert(data); }, // handler if second request succeeds 
                            });
                }, 5000);



                    },

                  });
function getCSVText(evt)  {

  if (currentChecklistCountry)  {

    var form = $('<form method="post" action="../php/sendCSV.php?country=' + currentChecklistCountry + '"></form>');

    $('body').append(form);

    form.submit();

    form.remove();
  }
  else  checklistCountryButton.classList.add("needsAttention");
}

function openChecklistPage()  {

   if (!currentChecklistCountry)  {
       checklistCountryButton.innerHTML = "Select Country";
       checklistCountryButton.classList.add("needsAttention");
       return;
    }

   if (gNumDays == undefined) gNumDays = 12;

   vars = "?country="     + currentChecklistCountry;
   vars += "&num_days="   + gNumDays;
   vars += "&line_nos="   + lineNumbers.checked;
   vars += "&left_check=" + leftCheck.checked;
   vars += "&endemics="   + showEndemics.checked;
   vars += "&sci_names="  + !sciNames.checked;
   vars += "&italics="    + !italics.checked;

   window.open( '../php/makePDF.php' + vars, '_blank' );
}