如何在 zend 框架 2 或 AjaxContext 中使用 ajax?
Posted
技术标签:
【中文标题】如何在 zend 框架 2 或 AjaxContext 中使用 ajax?【英文标题】:how to use ajax in zend framework 2 or the AjaxContext? 【发布时间】:2012-10-23 11:22:29 【问题描述】:AjaxContext
helper 是 ZF1 中的一个简洁功能,我在很多地方都使用了它。
我想知道这在 ZF2 中是否可用。
我做了一个测试并补充说:
public function init()
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('input', 'html')
->addActionContext('number', 'html')
->initContext();
在控制器中,添加了一个动作:
public function inputAction()
$form = new AddInput();
return ['form' => $form];
一个文件input.ajax.phtml
还有一个 ajax 调用:$.get('/form/input/format/html').css("display","block");
请求正常,带有200
代码,但我收到渲染错误
Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with message 'Zend\View\Renderer\phpRenderer::render: Unable to render template "form/index/input"; resolver could not resolve to a file' in C:\xampp\htdocs\Zend-Project\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php on line 454
( ! ) Zend\View\Exception\RuntimeException: Zend\View\Renderer\PhpRenderer::render: Unable to render template "form/index/input"; resolver could not resolve to a file in C:\xampp\htdocs\Zend-Project\vendor\zendframework\zendframework\library\Zend\View\Renderer\PhpRenderer.php on line 454
# Time Memory Function Location
1 0.0003 139048 main( ) ..\index.php:0
2 0.0969 4288136 Zend\Mvc\Application->run( ) ..\index.php:12
3 0.1463 6125720 Zend\Mvc\Application->completeRequest( ) ..\Application.php:310
4 0.1463 6125832 Zend\EventManager\EventManager->trigger( ) ..\Application.php:326
5 0.1463 6125904 Zend\EventManager\EventManager->triggerListeners( ) ..\EventManager.php:208
6 0.1464 6127112 call_user_func ( ) ..\EventManager.php:468
7 0.1464 6127128 Zend\Mvc\View\Http\DefaultRenderingStrategy->render( ) ..\EventManager.php:468
8 0.1464 6127176 Zend\View\View->render( ) ..\DefaultRenderingStrategy.php:128
9 0.1465 6128304 Zend\View\View->renderChildren( ) ..\View.php:196
10 0.1465 6128936 Zend\View\View->render( ) ..\View.php:231
11 0.1466 6129560 Zend\View\Renderer\PhpRenderer->render( ) ..\View.php:203
任何想法出了什么问题,或者可能是替代方案?谢谢。
编辑:
如果我这样做,使用DefaultRenderingStrategy
:
public function inputAction()
$result = new ViewModel(array('some_parameter' => 'some value',));
$result->setTerminal(true);
return $result;
var_dump($this->result);
我会得到null
编辑2:
感谢@Sam,我设法让它工作。这是我的步骤:
$.get('/form/input', name: "John", time: "2pm" ).done(function(data)
$('#some_div').append(data);
);
controller
public function inputAction()
$request = $this->getRequest();
$results = $request->getQuery(); // this is the get string
$result = new ViewModel(['result' => $results]);
$result->setTerminal(true);
return $result;
view
<?php
echo '<div>'.$this->result->name.'</div>';
结果将是<div>John</div>
谢谢
【问题讨论】:
【参考方案1】:查看JsonStrategy。
此外,如果您想要返回完整视图(除了布局),只需返回带有 $viewModel->setTerminal(true)
的 ViewModel 即可。
【讨论】:
如果要发送HTML,则必须使用默认呈现策略(即接受text/html)并使用$vm->setTerminal(true)
以上是关于如何在 zend 框架 2 或 AjaxContext 中使用 ajax?的主要内容,如果未能解决你的问题,请参考以下文章