zoukankan      html  css  js  c++  java
  • ExtJS的定时任务(转)

    ExtJS的定时任务

    作者: fiker 发布于 十二.12, 2009, 所属分类: ExtJs

    最近用ExtJS做了一个管理系统,需要实现定时检测登录状态,如果状态已经失效,则提示重新登录,以前是使用setInterval定时执行JQuery的ajax或getJSON方法,定时访问一个链接,如login.php?act=check,根据返回的结果判断是否登录状态。

    返回值用JSON格式,用state节表示登录状态。
    如果状态有效则为:{“success”:”true”,”state”:”true”}
    无效则为:{“success”:”true”,”state”:”false”}
    success是ext判断是否正确的调用了接口并返回了正确的结果,是ajax的状态;
    state是用PHP判断当前用户的登录状态的,是自定义状态,也就是ajax的数据。

    ExtJS的定时任务是通过Ext.TaskMgr实现的。用它的start和stop方法来启动/停止定时任务。
    本着模块化的思想,把checkLogin做成了一个单一的函数,然后用Ext.TaskMgr定时执行;
    如果登录状态失效,则停止任务,并提示已经长时间未操作,请重新登录。
    提示框弹出来的时候就要stop这个任务,否则会一直弹对话框,虽然不会弹出多个,但对程序的性能还是有影响的。

    // JavaScript Document
    var task_CheckLoginState;//声明任务变量
    Ext.onReady(function(){
        task_CheckLoginState = {
            run: checkLogin,//执行任务时执行的函数
            interval: 10000//任务间隔,毫秒为单位,这里是10秒
        }
        Ext.TaskMgr.start(task_CheckLoginState);//初始化时就启动任务
    });
     
    function showlogin() {
        //显示登录界面
    }
     
    //检查登录状态的函数
    function checkLogin(){
        Ext.Ajax.request({
            url: 'login.php',//执行登录状态检查的程序
            disableCaching: true,//是否禁用缓存,当然要禁用
            timeout: 10000,//最大等待时间,超出则会触发超时
            success: function(response, option){//ajax请求发送成功时执行
                if (!response || response.responseText == '') {//返回的内容为空,即服务器停止响应时
                    Ext.TaskMgr.stop(task_CheckLoginState);
                    Ext.MessageBox.show({
                        title: '错误',
                        msg: '在检测您的登录状态时发生错误,请稍候再次进行登录。',
                        buttons: Ext.Msg.OK,
                        icon: Ext.MessageBox.ERROR,
                        fn: function(btn, text){
                            if (btn == 'ok') {
                                showlogin();//显示登录界面
                            }
                        }
                    });
                    return;
                } else {
                    result = Ext.decode(response.responseText);
                    if (result.success == 'true') {//success是ext用来判断访问url是否成功的依据
                        if (result.state == 'true') {//state是自定义的返回值,用来标识登录状态是否有效
                            return true;
                        } else {//登录状态失效
                            Ext.TaskMgr.stop(task_CheckLoginState);
                            Ext.MessageBox.show({
                                title: '登录检测',
                                msg: '您已经长时间未操作或已经退出登录,请重新登录。',
                                buttons: Ext.Msg.OK,
                                icon: Ext.MessageBox.INFO,
                                fn: function(btn, text){
                                    if (btn == 'ok') {
                                        showlogin();//显示登陆界面
                                    }
                                }
                            });
                            return false;
                        }
                    } else {//success的返回结果不是true,这种情况很少发生
                        Ext.TaskMgr.stop(task_CheckLoginState);
                        Ext.MessageBox.show({
                        title: '错误',
                        msg: '在检测您的登录状态时发生网络错误,请确认您已经链接网络后再次进行登录。',
                        buttons: Ext.Msg.OK,
                        icon: Ext.MessageBox.ERROR,
                        fn: function(btn, text){
                            if (btn == 'ok') {
                                showlogin();//显示登陆界面
                            }
                        }
                        });
                    }
                }
            },
            failure: function(data){//ajax请求发送失败或超时
                Ext.TaskMgr.stop(task_CheckLoginState);
                Ext.MessageBox.show({
                title: '错误',
                msg: '在检测您的登录状态时发生网络错误,请确认您已经链接网络后再次进行登录。',
                buttons: Ext.Msg.OK,
                icon: Ext.MessageBox.ERROR,
                fn: function(btn, text){
                    if (btn == 'ok') {
                        showlogin();//显示登录界面
                    }
                }
                });
            },
            params: {
                act: 'check'
            }
        });
        return true;
    }

  • 相关阅读:
    我看到的我未曾是你们看到的我。
    nagios状态数据更新不及时问题
    Ubuntu下安装 nagiosgraph报错处理
    禁止、允许PING
    windows批量关机
    [转载]div仿框架(B/S结构软件界面)详解[非quirks模式全兼容]
    rrdtool错误attempt to put segment in horiz list twice
    命令参考大全 iostat
    SAP学习手册
    顾问成长之路
  • 原文地址:https://www.cnblogs.com/dwfbenben/p/2485899.html
Copyright © 2011-2022 走看看