如何在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在模式窗口中渲染视图?的主要内容,如果未能解决你的问题,请参考以下文章