2009-02-19 87 views
1

我在Zend Framework中使用jquery,这是我的第一次尝试。 我已经通过another question发现,我可以通过改变,像这样的情况下改变响应:Zend Framework'AjaxContent'&ResponseSegmentation问题

$ajaxContext = $this->_helper->getHelper('AjaxContext'); 
$ajaxContext->addActionContext('myaction', 'html'); 
$ajaxContext->initContext(); 

现在,这已经帮助了很多,但新的问题又显示:

我的页面由不同的responseSegments,当我通过改变Context来响应Ajax请求时,我的其他ResponseSegments也'认为'他们正在发送Ajax,但他们不是。前端控制器要求提供viewscript.ajax.phtml ...这是错误的,它应该是viewscript.phtml(存在)。

回答

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. 
     } 
    } 
}