当我运行不带ajax的php脚本作为GET请求时,我的代码工作正常。系统提示我下载渲染的pdf,一切都很好。但是,我需要使用ajax,因为我需要从html页面向php脚本发送比GET请求中可以处理的更多信息。
我需要在我的ajax中放入什么才能使它起作用?
谢谢
js
function makePDF()
{
var x;
if(window.event) // IE8 and earlier
{
x=event.keyCode;
}
else if(event.which) // IE9/Firefox/Chrome/Opera/Safari
{
x=event.which;
}
keychar=String.fromCharCode(x);
alert(keychar);
if (keychar == 'p' || keychar == 'P')
{
var charSheetHTML = characterSheet.innerHTML;
$.ajax({
url: 'pdf.php',
data: {'charactersheet': charSheetHTML,},
type: 'post',
success: function (data) {**WHAT_DO_I_PUT_HERE??**},
error: function (data) { alert("error\n" + data.toString()); }
});
}
}
pdf.php
<?php
include_once( "bxcharacter/PDFChar.php.inc" );
PDFChar();
?>
PDFChar.hph.inc
<?php
require_once('./tcpdf/tcpdf.php');
function PDFChar(){
$pdf = new TCPDF();
$pdf->AddPage('P');
$pdf->writeHTML($_POST['charactersheet']);
$pdf->Output("character.pdf", 'D');
}
?>
这不是ajax解决方案,但是您可以通过这种方式发送数据,如果没有错误发生,则您的页面不会更改。
使用隐藏的输入创建包含要发送的数据的表单元素:
示例格式:
<form id="myForm" method="GET" action="pdf.php">
<input type="hidden" name="data1" type="hidden" value="your JSON.stringify() data">
</form>
js代码(在您的ajax请求所在的位置调用这些代码:]]
var myForm = '<form id="myForm" method="GET" action="pdf.php">';
myForm += '<input type="hidden" name="data1" type="hidden" value="JSON.stringify() data">';
myForm += '</form>';
$("body").append(myForm); // temporarily appending
$("#myData-form").submit(); // submitting form with data
$("#myData-form").remove(); // remove form after submit
并且正如您所说,强制下载将强制文件下载,页面将保持不变。但是,如果发生错误,您的页面将会改变。
我不知道这是否是一种有效的方法,但就我而言,这是可行的。
[旧问题,但是我试图用Laravel PDF扩展名做类似的事情,却偶然发现了这个问题。我确实在一个不错的博客文章的帮助下成功地异步完成了此操作]