EXTJS 4 - 全局异常监听器

26

我面临这样一个情况:在管理区域对各种Ext gridpanel等进行ajax请求。如果没有活动,已登录的用户将在5分钟后自动注销,这是正常的。

在这种情况下,服务器会发送一个重定向403到登录页面。

目前,我正在插入一个:

listeners: {
    exception: function(proxy, response, operation, eOpts) {
        if (response.status == '403')
            window.location = 'login';
    }
}

对于每一个有点过头的store代理。

有没有人能够友好地告诉我如何在ExtJS和服务器之间的所有通信中添加监听器?

我正在使用MVC应用程序架构,所以可能可以在controller.jsapp.js中只需要一行代码。

谢谢

3个回答

28
在你的应用程序开头插入以下片段。使用此方法,每个响应,无论是来自店铺还是表单等,都将被检查并重定向到登录页面。
Ext.Ajax.on('requestexception', function (conn, response, options) {
    if (response.status === 403) {
        window.location = 'login';
    }
});

1
有趣的是,我们两个同时回答了这个问题,并且都给出了相同的答案。所以它一定是正确的。 - nightwatch
靶心!非常感谢。 - Shiplu Mokaddim

7
我不确定这个方法是否能捕获所有的ajax请求,但是假设你正在使用AjaxProxy与服务器进行通信,那么它应该可以工作: 在Ext.Ajax单例中处理'requestexception'事件 代码示例:
Ext.Ajax.on('requestexception', function(conn, response, options, eOpts) {
    //your error handling here
});

我没有尝试过,但如果您尝试了,请在此处发布更新。

6
一个更完整的解决方案,可以实现全面覆盖,如下所示:
Ext.util.Observable.observe(Ext.data.Connection, {
    requestexception: function(conn, response, options) {
        if(response.status == '403')
            window.location = 'login';
    }
});

这是因为底层类Ext.data.Connection不仅在Ext.Ajax中使用,还用作Ext.data.Store、Ext.data.Model所使用的Ext.data.Proxy。这个类处理store.load()model.save()等调用时的异常。这应该是一个更完整的通用处理程序。
请参阅我的博客文章以获取更多详细信息。

Ext.util.Observable.observe在Ext JS 5.x中已不再使用。您需要使用Ext.Ajax.on。 - jprism
不,你不需要这样做。是的,在 Ext JS 5.0.1 中,typeof Ext.util.Observable.observe 将输出 "function" - EricLavault

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接