我在Zend Framework中使用jquery,这是我的第一次试用。 我已经通过another question找到了,我可以通过改变上下文来改变响应:
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('myaction', 'html');
$ajaxContext->initContext();
现在这已经有了很多帮助,但是一个新问题已经显示出来了:
我的页面由不同的responseSegments组成,当我通过更改Context响应Ajax请求时,我的其他ResponseSegments也“认为”他们正在发送Ajax,但他们不是。前端控制器要求一个viewscript.ajax.phtml ...这是错误的,它应该是viewscript.phtml(存在)。
答案 0 :(得分:1)
与此同时,我想出了如何解决这个问题,因为我认为其他人将来会遇到同样的问题,我会在这里回答我自己的问题:
在我的ActionSetup.php(或bootstrap.php中,如果动作设置没有分开)我需要确保只有动作才被推送到动作堆栈,如果请求不是XmlHttpRequest。
唯一缺少的是if语句:
if (!$request->isXmlHttpRequest())
整个事情看起来像那样:
/**
* Front Controller plugin to set up the action stack.
*
*/
class Project_Controller_Plugin_ActionSetup extends Zend_Controller_Plugin_Abstract
{
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
if (!$request->isXmlHttpRequest())
{
$front = Zend_Controller_Front::getInstance();
if (!$front->hasPlugin('Zend_Controller_Plugin_ActionStack'))
{
$actionStack = new Zend_Controller_Plugin_ActionStack();
$front->registerPlugin($actionStack, 97);
} else
{
$actionStack = $front->getPlugin('Zend_Controller_Plugin_ActionStack');
}
$menuAction = clone ($request);
$menuAction->setActionName('menu')
->setControllerName('index');
$actionStack->pushStack($menuAction);
$userlogAction = clone ($request);
$userlogAction->setActionName('userlog')
->setControllerName('index');
$actionStack->pushStack($userlogAction);
//etc.
}
}
}