получить обработанный контент в действии для ответа ajax - PullRequest
1 голос
/ 23 июня 2011

каждое тело!

Я новичок в Zend Framework, я работаю над вкладками на основе AJAX в Zend Framework. При нажатии на вкладку, которую я хочу, вызывает действие, я хочу получить обработанный контент (контент, отображаемый в соответствующем представлении), чтобы отправить его как ответ.

Спасибо!

Ответы [ 4 ]

3 голосов
/ 23 июня 2011

Не уверен, что именно вы хотите, но вы можете отключить рендеринг макета в вашем действии, и будет отображаться только сценарий вида действия, например,

public function exampleAction() {

    if ($this->getRequest()->isXmlHttpRequest()) {

        $this->_helper->layout->disableLayout();

        $this->view->var = 'some var';
    } else {
        throw new Exception('Not an ajax requrests');
    }
}
1 голос
/ 23 июня 2011

Просмотр:

<a href="#" class="tab">Click</a>
<div id="content"></div>

JS:

$('.tab').click(function() {
    $.get('/controller/ajax', function(data) {
        $('#content').html(data);
    });
});

Контроллер:

public function ajaxAction()
{
    echo 'string';
    exit;
}

Вы просто должны добавить выход;в вашем действии, чтобы он не пытался визуализировать макет снова.

0 голосов
/ 16 апреля 2013

попробуйте это, также обязательно добавьте выход в конце

$this->view->assign(array('name' => 'my name', 'msg' => 'my message'));
echo $this->view->render('message/display.phtml');
exit;

тогда в .phtml файле просто позвоните

<?php echo $this->msg; ?>
0 голосов
/ 23 июня 2011
public function yourAction() {
        // get response and layout 
        $response                        = $this->getResponse();
        $layout                          = $this->_helper->layout();

        // rendering action's template      
        $this->render( 'template' );   

        // setting content, don't remember to echo $this->Layout()->content in the layout script                           
        $layout->content                 = $response->getBody();

        //  here you can get your rendered content, and do something with it 
        $renderedContent                 = $layout->render( 'layout' );  

        // you have to clean response otherwise will be automaticaly sent
        $response->clearBody();                                         
}
...