AjaxContext
helper 是 ZF1 中的一个很棒的功能,我在很多地方都使用了它。
我想知道 ZF2 中是否提供此功能。
我做了一个测试并添加了:
public function init()
{
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('input', 'html')
->addActionContext('number', 'html')
->initContext();
}
在 Controller 中,添加了一个操作:
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,我才成功让它发挥作用。这是我的步骤:
javascript
$.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>
谢谢
最佳答案
查看 JsonStrategy .
此外,如果您想要返回完整 View (除了布局),只需使用 $viewModel->setTerminal(true)
返回一个 ViewModel 即可。
关于php - 如何在zend框架2或AjaxContext中使用ajax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13201361/