ZF2如何模拟ajax请求

时间:2014-05-04 06:39:20

标签: javascript ajax forms http-headers zend-framework2

我已经用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:我可以但不想在重定向命令中添加额外的参数,它们太多了。

0 个答案:

没有答案