我已经用ZF2编写了一个CMS,我正在为系统添加ajax功能。
我的所有网址都是正常的,所以如果JavaScript被禁用或js代码中有错误,链接和表单提交可以正常工作,到目前为止一直很好......
我有一个特殊的ajax布局和模块onDispach
事件:
if ($e->getRequest()->isXmlHttpRequest())
$controller->layout('layout/ajax_layout_admin.phtml');
else
$controller->layout('layout/layout.phtml');
对于没有file input
的普通链接和表单,这很好用。
对于带有file input
的表单我只是高举提交事件并将表单目标设置为iframe,巫婆按预期工作但是......
问题出现了:在表单提交的大多数操作中都有一个重定向命令。例如,提交到新/编辑操作并重定向到列表操作,这适用于ajax请求页面被重定向到正确的标头,以便新操作知道这是ajax并设置正确的布局,但在使用iframe时重定向的操作加载了正常的布局。
我尝试在重定向之前设置标题我自己,但没有任何区别。
我有一个BaseAbstractActionController
类,我的所有控制器都扩展了这个类,所以在这个类中:
public function onDispatch(MvcEvent $e)
{
$this->_setViewModel();
/* @var $request \Zend\Http\Request */
$request = $e->getRequest();
$layout = $this->params()->fromPost('systemLayout', false);
if ($layout) {
$this->layout('layout/' . $layout);
//--------------------------------------- Trying to get this part to work
if ($layout == 'form_submit') {
$x = $this->request->getHeaders()->get('X_REQUESTED_WITH');
if ($x)
$this->request->getHeaders()->removeHeader($x);
// ---------------------------------- didn't work
$this->request->getHeaders()->addHeaders(array(
'X_REQUESTED_WITH' => 'XMLHttpRequest'
));
// ---------------------------------- didn't work
$this->getResponse()->getHeaders()->addHeaders(array(
'X_REQUESTED_WITH' => 'XMLHttpRequest'
));
}
}
return parent::onDispatch($e);
}
所以解决这个问题的方法是什么?
可能在使用js提交表单之前设置自定义标题???或者......
PS:我可以但不想在重定向命令中添加额外的参数,它们太多了。