将 GET 请求转换为 POST 请求以加载生成的 PDF 文件

Transform GET request to POST request to load generated PDF file

在 html 页面中,我有一个按钮可以加载生成的 pdf:

<button onclick='getpdf()'>GET PDF</button>

<script>
function getpdf(){
  data={
    var1: 'var1',
    var2: 'var2'
  };
  window.open('genpdf.php?var1='+data['var1']+'&var2='+data['var2'], '_new');
}
</script>

genpdf.php 是这样的:

<?php
require('fpdf/fpdf.php');

$var1 = $_GET['var1'];
$var2 = $_GET['var2'];

$pdf = new PDF();

/* ......... */

$pdf->Output('D','generated.pdf');
?>

我的问题是:

如何更改我的代码以使用 POST 方法传递参数?

解决方案

ADyson 向我推荐了这个解决方案:

<form id="pdf" action="genpdf.php" methon="POST" target="_new">
  <input type="hidden" name="var1" />
  <input type="hidden" name="var2" />
  <button onclick='getpdf()'>GET PDF</button>
</form>

<script>
function getpdf(){
  $("#pdf input[name=var1]").val('var1');
  $("#pdf input[name=var2]").val('var2');
  $("#pdf").submit();
}
</script>

<?php
require('fpdf/fpdf.php');

$var1 = $_POST['var1'];
$var2 = $_POST['var2'];

$pdf = new PDF();

/* ......... */

$pdf->Output('D','generated.pdf');
?>

而且效果很好!

但是

如果我想在不使用表格的情况下做到这一点,我该怎么做?

您不需要任何 javascript 功能。只需将 FORM 元素与操作一起使用 post:

<form action="genpdf.php" method="post" target="_blank">

    <input type="text" name="var1" value="" />
    <input type="text" name="var2" value="" />

    <button type="submit ">GET PDF</button>
</form>

不要忘记在您的 PHP 脚本中使用 $_POST 而不是 $_GET。

如果您想在不编码的情况下实施 HTML 然后使用以下 Javascript

var myform = document.createElement('form');
myform.style.display = "none";
myform.name='PdfGenOrSomethingElse';
myform.method='POST';
myform.action='genpdf.php';
myform.target='_blank';

var var1=document.createElement('input');
var1.type='text';
var1.name='var1';
var1.value='Put/update your value';

var var2=document.createElement('input');
var2.type='text';
var2.name='var2';
var2.value='Put/update your value';

myform.appendChild(var1);
myform.appendChild(var2);

document.body.appendChild(myform);
myform.submit();

注意表单不会显示在页面上。 “显示”属性 设置为“none”。