我有一个控制器设置,它使用了一大堆不同的AjaxContent助手。控制器的init()如下所示:
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('index', 'html')
->addActionContext('compose', 'html')
->addActionContext('sent', 'html')
->addActionContext('recipients','html')
->addActionContext('inbox', 'html')
->addActionContext('sendsuccess','html')
->initContext();
在composeAction()的末尾,如果满足了某个条件,AJAX请求应该转发给sendsuccessAction()。
使用标准的_forward()方法执行此操作似乎不会将其作为AjaxContent请求转发-页面希望使用标准视图模板进行呈现。
关于如何使用_forward或其他重定向方法,同时将请求保留为AJAX请求,以便触发正确的操作上下文,您有什么想法吗?
发布于 2009-08-10 22:02:10
基本上发生的情况是,initContext()
方法(为ajax响应设置环境)只在您的第一个分派的操作中被调用,而不是第二个。
有很多不同的方法来解决这个问题。
首先,要验证这就是问题所在,请尝试调用
$this->_helper->ajaxContext->initContext();
从你的sendsuccessAction
。这将强制AjaxContext操作帮助器再次正确设置viewRenderer。
或者,您可以将对$ajaxContext->initContext()
的调用从init()
方法移动到控制器的preDispatch()
方法。这将导致它在调度每个操作之前运行。
发布于 2009-08-10 21:49:00
使用:
$this->_forward("action","controller","module",array('format'=>'html')); # or ajax or json or whatever
https://stackoverflow.com/questions/1257377
复制相似问题