我的想法是通过ajax将数据发送到外部php,其中外部php将使用tcpdf创建pdf,然后将该pdf返回给我。但是有些不对劲。
我看不出错误在哪里。基本上,我试图通过ajax发送两条信息。第一个是完整的html标记字符串,我使用.html()
函数分配给它。第二个是测试它是否也会被发送。
JQuery看起来像这样(问题在于PDF按钮):
$(".pdf-report").dialog({
autoOpen: false,
modal: true,
draggable: true,
resizable: true,
width: 700,
height: 650,
dialogClass: "no-close",
buttons: {
"PDF": function(){
/*
var send_html = $('#query_result').html();
$.post('pdfajax.php',
{
qch: 'TESTQCH',
code: send_html
},
function( data ){
$('#report_result').html(data); // assuming there is a div with id result
}
);
*/
var send_html = $('#report_result').html();
alert(send_html);
$('#ireport_result').prop('src', 'pdfajax.php?send_html='+send_html);
},
"Close": function() {
$(this).dialog("close");
}
}
});
外部文件pdfajax.php如下所示:
require_once 'core/init.php';
require_once 'tcpdf/tcpdf.php';
$html = input::get('send_html');
//echo 'test ',var_dump($qch),'<br />',var_dump($html);
$method = $_SERVER['REQUEST_METHOD'];
//echo $method;
if(strtolower($method) == 'post'){
$pdf = new TCPDF();
$pdf->AddPage();
$pdf->writeHTML($html, true, false, false, false, 'C');
$pdf->Output('example_001.pdf', 'I');
我知道什么都没发送,因为这是结果(空白的iframe,而不是上面的文字):
哦,是的,输入类有get函数,简单地说:
public static function get($item){
if(isset($_POST[$item])){
return $_POST[$item];
} elseif (isset($_GET[$item])){
return $_GET[$item];
}
return '';
}
编辑:
这是HTML
<div class="pdf-report" title="Report Dialog">
<br />
<div id="report_result"></div>
<iframe src="tcpdf/examples/example_001.php" id="ireport_result"></iframe>
<br />
答案 0 :(得分:1)
我不认为,你的ajax调用存在问题。您的$.post
似乎没问题。但问题可能是因为你成功的回调处理程序。
在ajax请求成功完成后,您将pdfajax.php设置为iframe的源代码,这没有任何意义。因为,这会触发对URL“pdfajax.php”的新 GET 请求,并且根本不会包含任何请求参数。
理想情况下,您的数据对象将包含从“pdfajax.php”收到的响应,您可以使用该响应在div中显示。
function( data ){
$('#report_result').html(data); // this can be used for html response not for pdf.
}
但是如果您想要iframe中的数据,我认为不需要Ajax。您可以直接为iframe设置src,如下所示。
$(".pdf-report").dialog({
autoOpen: false,
modal: true,
draggable: true,
resizable: true,
width: 700,
height: 650,
dialogClass: "no-close",
buttons: {
"PDF": function(){
var send_html = $('#report_result').html();
$('#ireport_result').prop('src', 'pdfajax.php?code='+send_html);
},
"Close": function() {
$(this).dialog("close");
}
}
});
你的php文件几乎没有问题。请求参数为code
而不是send_html
,您的请求类型为GET
而不是POST
。
require_once 'core/init.php';
require_once 'tcpdf/tcpdf.php';
$html = input::get('code');
$method = $_SERVER['REQUEST_METHOD'];
if(strtolower($method) == 'get'){
$pdf = new TCPDF();
$pdf->AddPage();
$pdf->writeHTML($html, true, false, false, false, 'C');
$pdf->Output('example_001.pdf', 'I');
}