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