2014-11-14 93 views
0

我需要将一个变量(实际上是通过JavaScript动态生成的大量HTML)传递给将要输出PDF的“视图”控制器(使用CakePdf插件/ wkHtmlToPdf)。将CakePHP变量传递给CakePdf

我已经通过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);  
     } 
    }); 

而且它似乎返回data包含PDF流,但我无法将其发送给浏览器。 (这是由插件完成的,所以我不能回显它 - 插件可能会尝试这样做,但由于请求在后台完成,所以不起作用)。

我也尝试使用postLink方法来生成按钮。

<li><?php echo $this->Form->postLink(__('Button'), array('action' => 'view', $project['Project']['id'].'.pdf'), null); ?> </li>  

它确实工作,在生成PDF的方面。但在这种情况下,我不知道如何传递JavaScript变量($ matrix)。

任何想法?

+0

可以calrify您的问题!你想要达到什么? – 2014-11-17 10:40:32

+0

基本上我需要发布一些冗长的数据到我的控制器,它将处理数据并使用CakePdf插件显示PDF。当我尝试使用异步请求时,它没有正确回应。当我尝试使用Form组件的postLink方法来生成链接时,我无法将我的“JavaScript变量”传递给我的控制器。这有帮助吗? – gtamorim 2014-11-17 17:59:20

回答

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(); });