26

我有一种情况,我在管理区域中ajax从各种 Ext 等向服务器发出请求。gridpanel

如果没有活动,登录的用户将被注销,例如。5分钟是正常的。

在这种情况下,服务器将重定向发送回403登录页面。

现在我正在插入一个:

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

对于每个store's有点矫枉过正的代理。

有人能好心告诉我如何为 ExtJS 和服务器之间的所有通信添加侦听器吗?

我正在使用 MVC 应用程序架构,因此它可能是controller.jsapp.js.

谢谢

4

3 回答 3

28

在您的应用程序的开头插入以下代码段。有了这个每一个响应,无论是来自商店、表单还是......,都将被检查并重定向到登录页面。

Ext.Ajax.on('requestexception', function (conn, response, options) {
    if (response.status === 403) {
        window.location = 'login';
    }
});
于 2011-11-05T21:33:35.723 回答
7

我不确定这是否会捕获所有 ajax 请求,但假设您使用 AjaxProxy 与服务器进行所有通信,它应该可以工作:处理 Ext.Ajax 单例中的 'requestexception' 事件,如下所示

Ext.Ajax.on('requestexception', function(conn, response, options, eOpts) {
    //your error handling here
});

我还没有尝试过,但如果你这样做了,你能在这里发布更新吗?

于 2011-11-05T21:36:53.987 回答
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.Proxy也用于Ext.data.Store, Ext.data.Model. 这会处理诸如store.load()和之类的调用的异常model.save()。这应该是一个更完整的包罗万象的处理程序。

在我的博客文章中查看更多详细信息。

于 2014-11-26T02:58:26.993 回答