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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM