2014-11-14 4 views
0

Мне нужно передать переменную (на самом деле большое количество HTML, динамически генерируемую с помощью JavaScript) контроллеру 'view', который выведет PDF-файл (используя CakePdf-плагин/wkHtmlToPdf).Передача переменных Javascript в 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 ваш вопрос! Чего вы хотите добиться точно? –

+0

В принципе, мне нужно отправить некоторые длинные данные моему контроллеру, который будет обрабатывать данные и отображать PDF, используя плагин CakePdf. Когда я попытался использовать асинхронный запрос, он не был правильно «эхом». И когда я попытался использовать метод postLink для компонента Form для генерации ссылок, я не смог передать свои «переменные JavaScript» на свой контроллер. Это помогает? – gtamorim

ответ

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(); }); 
Смежные вопросы