Ajax调用不会触发Zend 2 EVENT_DISPATCH事件

时间:2013-12-06 17:42:09

标签: javascript php zend-framework zend-framework2

在我的应用程序模块中,我有一个事件监听器,它会在每个页面上触发。取自Application模块中的Module.php:

public function onBootstrap(MvcEvent $e)
{
    $eventManager        = $e->getApplication()->getEventManager();
    $eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'authenticate'),1);
}
public function authenticate(){ 
    //auth here. This works on every page load except an ajax call
}

使用Javascript:

var adminData={ ... }
return $.post("/admin/save",adminData); //Will not trigger EVENT_DISPATCH!

我已经验证了事件会在每次加载页面时触发,除非使用javascript(ajax)调用。如果我浏览到js调用的链接(/ admin / save),则会触发该事件。为什么用javascript调用时不会触发事件?

2 个答案:

答案 0 :(得分:2)

您必须以更高的优先级附加您的侦听器,以便更早地触发它。操作本身也是一个事件监听器(onDispatch中的AbstractActionController),并以优先级1附加(请参阅manual)。 尝试以优先级2附加您的侦听器:

$eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'authenticate'),2);

答案 1 :(得分:0)

事实证明,事件正在每次调度,甚至是ajax请求上正确触发。令我困惑的是,action方法中的代码将首先执行,然后是事件触发器中方法中的代码。所以我的动作代码出错了,这取决于事件应该启动的方法。听取执行方法之前动作方法代码会是什么事情?