Ajax调用不会触发Zend 2 EVENT_DISPATCH事件
Ajax call does not trigger Zend 2 EVENT_DISPATCH event
在我的应用程序模块中,我有一个事件侦听器,它在每个页面上都会触发。取自应用程序模块中的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调用时不会触发事件?
您必须以更高的优先级附加侦听器,这样它才会更早被触发。动作本身也是一个事件侦听器(AbstractActionController
中的onDispatch
),并以优先级1附加(请参阅手册)。试着把你的听众放在优先级2:
$eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'authenticate'),2);
事实证明,事件在每次调度中都会正确触发,甚至是ajax请求。但让我困惑的是,action方法中的代码将首先执行,然后是事件触发器中方法中的码。因此,我的操作代码中出现了一个错误,这取决于事件应该启动的方法。在操作方法代码之前,要监听什么事件来执行方法?
相关文章:
- issue with FB.Event.subscribe
- Angularjs :$routeChangeStart event
- event.prventDefault()持续多久
- <text区域>在我的html中包含event.keycode==13之后,wrap就不起作用了
- KeyDown event for CKeditor
- Javascript events: window.event vs argument reference (funct
- 动态填充Bootstrap选择选择器:change event dos'不起作用
- <td> focusin event .addclass
- event.preventDefault阻止ajax调用
- google.maps.event.addDomListener(window, 'load', fun
- jQuery event.target is_a_child_of(element)
- event.stopPropagation()在firefox javascript中不起作用
- asp.net text onkeyup event
- 如何从ondragend获取正确的event.pageX
- 面料:“;鼠标:向下”;在event.target中未返回对象
- 使用event.target.classlist区分按钮颜色
- event.keycode vs event.which
- 将字符串作为参数传递给函数onclick event jquery
- iFrame onload JavaScript event
- JavaScript使event.key警报event.keyCode的基本polyfill实现Chrome的现代化