在我的控制器init()方法中,我调用AjaxContext-Helper并为该控制器中的某些方法/操作设置它。像这样:
public function init()
{
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('setlabel', 'html');
$ajaxContext->initContext();
}
现在,当我想使用从 ajax-request 重定向到非ajax方法 ...
$this->redirector->gotoSimple('manage', 'team', null, array('id' => $teamID));
我遇到了页面无法加载的问题。我认为这是因为AjaxContext弄乱了标题。
我在重定向之前尝试过clearHeaders和clearContexts,但没有任何作用。
[edit] 在相应的ajaxed方法(AjaxContent)中,我通常使用对myviewscript.ajax.phtml的ajax响应进行响应。但在某种情况下,我现在想在另一个控制器中重定向到正常的非ajax动作。[/ edit]
有什么想法吗?谢谢!
答案 0 :(得分:3)
确定。希望我理解你的目标。
首先,redirector
的实例上没有Zend_Controller_Action
方法。
所以,这个:
$this->redirector->gotoSimple('manage', 'team', null, array('id' => $teamID));
应该是这样的:
$this->_helper->redirector->gotoSimple('manage', 'team', null, array('id' => $teamID));
当然,除非您已将重定向器分配给控制器的属性。在这种情况下,你应该是对的,但我会仔细检查。
此外,在XHR请求期间调用_redirect
方法或重定向器操作助手将仅重定向XHR请求本身。您是否尝试重定向XHR请求?或者实际上将用户的浏览器重定向到另一个页面?
修改强>
好的。那么,w / r / t你的评论: 如果满足某些条件,您的目标是将用户的浏览器会话重定向到与XHR请求不同的页面。重定向器操作助手在此处不会使用。 XHR / Ajax请求没有什么特别之处......如果它看到了301/302重定向,它就会自愿遵循它,就像常规的浏览器请求一样。它没有做任何有趣的事情。
所以,要解决你的问题,你必须做一些自定义的事情。这是可行的:
window.location = whatever
可以正常使用。答案 1 :(得分:2)
在jason方法的基础上,我通过使用javascript重定向进行响应来解决问题。因此,我将javascript重定向发送到myview.ajax.phtml:
,而不是我通常的消息$url = $this->view->url(array('controller' => 'team',
'action' => 'manage',
'id' => $teamID), null, null);
$this->view->response = '<script type="text/javascript">
window.location = "'.$url.'"
</script>';