2014-11-14 130 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(); });