如何在ZF2中使用Ajax在模式窗口中渲染视图?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在ZF2中使用Ajax在模式窗口中渲染视图?相关的知识,希望对你有一定的参考价值。

[我尝试在Zend Framework 2中通过ajax调用在模态窗口中使用专用视图呈现动作。

这是我的控制器动作:

public function myAction()
{
    $htmlViewPart = new ViewModel();
    $htmlViewPart->setTemplate('path/to/my/view')
                 ->setTerminal(true)
                 ->setVariables(['arrayVar' => ['a', 'b', 'c']]);

    return $htmlViewPart;
}

视图:

<?php
    foreach($arrayVar as $k => $v)
    {
        echo $k . ':' . $v . '<br>';
    }

The js:

$(".my-modal-link").click(function() {
    $('#myModal .modal-body').load($(this).data('/url/to/my/action'));
});

这不行。我也尝试了JSON模型:

public function myAction()
{
    $htmlViewPart = new ViewModel();
    $htmlViewPart->setTemplate('path/to/my/view')
                 ->setTerminal(true)
                 ->setVariables(['arrayVar' => ['a', 'b', 'c']]);

    $htmlOutput = $this->getServiceLocator()->get('viewrenderer')->render($htmlViewPart);

    $jsonModel = new JsonModel();
    $jsonModel->setVariables(['html' => $htmlOutput]);

    return $jsonModel;
}

但是模态中的最终渲染类似于:

{"html":"0:au003Cbru003E1:bu003Cbru003E2:cu003Cbru003E"}

对实现该目标有想法吗?

答案

您所需要做的就是使用setTerminal()禁用布局,并从控制器返回适当的模型以在模式中呈现HTML输出。

在您的情况下,您必须返回ViewModel实例。因此,您的第一种方法是正确的。这应该工作:

$htmlViewPart = new ViewModel();
$htmlViewPart->setTemplate('path/to/my/view')
             ->setTerminal(true)
             ->setVariables(['arrayVar' => ['a', 'b', 'c']]);

return $htmlViewPart;

第二种情况是;您正在尝试将HTML输出用作json数据。尝试更改类似于以下内容的ajax加载机制:

$(".my-modal-link").click(function() {
    $.get("/url/to/my/action", function(data) {
        $('#myModal .modal-body').html(data);
    });
});

这将把渲染的输出(没有布局)附加到模态的主体中。对于JsonModel场景,您可能还需要read this

希望有帮助。

另一答案

我找到了解决方案。

另一答案

有同样的问题,可以解决...

以上是关于如何在ZF2中使用Ajax在模式窗口中渲染视图?的主要内容,如果未能解决你的问题,请参考以下文章

ZF2 - 从其他动作和模块渲染视图

如何在 Spring MVC 中使用 AJAX 渲染视图

如何通过主干中的 ajax 调用使用模型渲染多个视图

将视图渲染到 ExpressJS 中的变量中(用于 AJAX 响应)

如何在控制器中获取视图然后渲染数据并将其传递给 ajax

如何在zf2 AbstractRestfulController中调用模板文件