我需要将一个变量(实际上是大量的HTML,通过JavaScript动态生成)传递给将要输出PDF的“视图”控制器(使用CakePdf插件/ wkHtmlToPdf)。
我通过Ajax尝试过:
$.ajax({
type: "POST",
url: "<?php echo $this->webroot . $this->params["controller"]; ?>/view/"+$id+".pdf",
data: {id: $id, matrix: $matrix.html()},
success: function(data){
console.log(data);
}
});
它似乎确实返回包含PDF流的data
,但我无法将其发送到浏览器。 (这是由插件完成的,所以我无法回应它 - 插件可能已经尝试这样做了,但是因为请求是在后台完成的,所以它不起作用。)
我也尝试使用postLink方法生成按钮。
<li><?php echo $this->Form->postLink(__('Button'), array('action' => 'view', $project['Project']['id'].'.pdf'), null); ?> </li>
在生成PDF方面,它确实有效。但在这种情况下我不知道如何传递JavaScript变量($ matrix)。
有什么想法吗?
答案 0 :(得分:1)
我不确定这是否是最优雅的答案(很可能不是),但我能够通过使用隐藏的表单来提交我的数据来解决这个问题。
<form action="projects/view/" name="frmPrint" id="frmPrint" style="display:none;" method="post">
<input id="printData" type="hidden" name="_method" value="POST">
</form>
<a id="printMatrix">Print</a></li>
使用JavaScript(jQuery)然后我在提交表单之前随时更改printData。
function printMatrix() {
var $matrix = $('#matrix'); // the element to be sent via post
$('#printData').val( $matrix[0].innerHTML ); // updating the hidden input
$('#frmPrint').submit(); // submitting the form
}
<a>
标记的点击触发器有一个绑定事件:
$(document).on('click', '#printMatrix', function(event){ printMatrix(); });