【问题标题】:Run php function on button click to download pdf在按钮上运行 php 函数单击以下载 pdf
【发布时间】:2020-10-21 17:40:53
【问题描述】:

我在触发器上创建了一个 onclick 事件,我需要在我实现 fpdf 的地方运行 php 函数,以便我可以下载 pdf 文件。

该事件已触发,现在我需要在单击该按钮时下载 pdf。

我认为问题在于 javascript,因为我是该领域的新手。

按钮被触发,它正在工作,但总是打开一个空白页面。如何修复 js 以便它可以直接下载该 pdf 文件?

<?php

require (get_template_directory() . '/assets/php/fpdf/fpdf.php');

function download(){
if (isset($_POST['download'])){

    $pdf = new FPDF();
    $pdf->AddPage();
    $pdf->SetFont('Arial','B',16);
    $pdf->Cell(40,10,'Hello World!');

    $rand = rand(1, 1000);

    $pdf->Output($rand . '.pdf', 'F');

  }
}

和js

function download() {
        $('.download').click(function() {
            var templateUrl = object_name.templatedir;
            $.ajax({
                type: "POST",
                url: templateUrl + '/includes/dompdf.php',
                success:function(url){
                    window.open(url, '_blank');
                },
            })
        });
    }

【问题讨论】:

  • 尝试替换 $pdf->Output('$rand.'.pdf','F'); on $pdf->输出($rand.'.pdf','D');
  • 在您的 PHP 中您是否在任何地方调用您的函数?换句话说,download(); 电话在哪里
  • 你会在任何地方调用javascript函数download()吗?
  • 我愿意。该函数在打开其中定义的空白窗口时被触发。 @RiggsFolly

标签: javascript php wordpress pdf fpdf


【解决方案1】:

这一行有一对多引号

$pdf->Output('$rand.'.pdf','F');

试试这个

$pdf->Output($rand . '.pdf', 'F');

另外,当您设置点击处理程序时,我不会在函数中运行它,请在没有函数包装器的情况下运行它以确保它运行。

<script>
$('.download').click(function() {
    var templateUrl = object_name.templatedir;
    $.ajax({
            type: "POST",
            url: templateUrl + '/includes/dompdf.php',
            success:function(url){
                window.open(url, '_blank');
            }
    })
});
</script>

而且您似乎没有运行 PHP 函数,所以要么添加调用,要么不要将该代码放入函数中

<?php

require (get_template_directory() . '/assets/php/fpdf/fpdf.php');

function download(){
    if (isset($_POST['download'])){

        $pdf = new FPDF();
        $pdf->AddPage();
        $pdf->SetFont('Arial','B',16);
        $pdf->Cell(40,10,'Hello World!');
    
        $rand = rand(1, 1000);
    
        $pdf->Output($rand . '.pdf', 'F');
    }
}

download();

我个人会在没有函数包装的情况下这样做

require (get_template_directory() . '/assets/php/fpdf/fpdf.php');

if (isset($_POST['download'])){

    $pdf = new FPDF();
    $pdf->AddPage();
    $pdf->SetFont('Arial','B',16);
    $pdf->Cell(40,10,'Hello World!');

    $rand = rand(1, 1000);

    $pdf->Output($rand . '.pdf', 'F');
}

因为最后一条评论

那么你需要在 yrou ajax 调用上传递download 参数

<script>
$('.download').click(function() {
    var templateUrl = object_name.templatedir;
    $.ajax({
            type: "POST",
            data: {download:1},
            url: templateUrl + '/includes/dompdf.php',
            success:function(url){
                window.open(url, '_blank');
            }
    })
});
</script>

【讨论】:

  • 我做到了。还是空白。 @RiggsFolly
  • 我删除了功能部分,还是一样。 @RiggsFolly
  • 非常感谢,我认为它正在工作,但我不断出错:警告:call_user_func_array() 期望参数 1 是有效的回调,未找到函数“下载”或 /var 中的函数名称无效/www/html/wp-includes/class-wp-hook.php 在第 287 行 @RiggsFolly
  • 这意味着你有一些东西正在调用 PHP download() 函数,所以你可以把它放回函数包装器中
  • PS:如果是的话,最好告诉我们这是 WordPress
猜你喜欢
  • 2013-04-04
  • 2015-12-25
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 2022-12-03
相关资源
最近更新 更多