En una página html tengo un botón que carga un pdf generado:
<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 es algo como esto:
<?php require('fpdf/fpdf.php'); $var1 = $_GET['var1']; $var2 = $_GET['var2']; $pdf = new PDF(); /* ......... */ $pdf->Output('D','generated.pdf'); ?>Mi pregunta es:
¿Cómo puedo cambiar mi código para pasar parámetros con el método POST?
SOLUCIÓN
ADyson me sugirió esta solución:
<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>y
<?php require('fpdf/fpdf.php'); $var1 = $_POST['var1']; $var2 = $_POST['var2']; $pdf = new PDF(); /* ......... */ $pdf->Output('D','generated.pdf'); ?>y funciona bien!
PERO
Si quisiera hacer eso sin el uso de un formulario, ¿cómo podría hacerlo?
No necesita ninguna función de javascript para esto. Simplemente use el elemento FORM con publicación de acción:
<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>No olvide usar $_POST en lugar de $_GET en su script PHP.
Si desea implementar sin codificar HTML, use el siguiente 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();Tenga en cuenta que el formulario no se mostrará en la página. La propiedad "display" se establece en "ninguno".