页面每5s实时刷新一次,当用户操作实时刷新1的时候,实时刷新2和3会随着实时刷新1
的选择而显示对应的数据,这就可能出现5s刷新的时候用户也在操作,这就导致了走了
两次后台(用户操作调用的方法和实时刷新调用方法一样),怎么解决这样问题?
我用的是ajax轮询
我不知道我对你的需求理解的对不对,这个你可以设置一个标签,每次刷新置0,每秒加1,自增到5就自动刷新。
你是要控制在怎样的层次呢?如果只是用户的刷新操作与你自动刷新的操作不能同时发生,这比较简单,你说了刷新方法就一个,你搞一个全局的变量,
比如 int lock=0;//0代表可以刷新 1代表当前正在刷新 需要等待
function ss(){
if(lock!=0){
alert("当前正在刷新,请稍后重试")
return;
}
//走到这里说明lock==0 将其修改为1表示要执行刷新了
lock=1;
//执行你的刷新逻辑...
//执行结束后 恢复lock的值 表示其他地方也可以刷新了
lock=0;
}
我不太了解前端的原理,这段控制如果放在后台加上锁就最安全了,放在前端的话基本上也可以满足你的要求了
用户操作时 1 停止定时器 2 ajax 3 启用定时器
走两次同样的方法并没有什么问题啊。总会有先后的,我觉得前端没什么影响,重点是你后台获取数据分析数据的地方会耗时。你需要加锁。或者你前端一个全局变量。比如我们把性能说差一点。你点击刷新和主动刷新都是一个方法,从开始刷新到后台执行数据,到数据返回布局渲染完成需要五秒。你是担心在这个等待的五秒过程中,又第二次出发请求吧。那就全局变量比如dataflag。默认false,当执行刷新方法的时候,判断为false。则从后台拿数据,同时赋值为true;判断为true的时候,说明后台正在处理数据,直接返回,或者提示数据正在加载中请稍后。等数据返回完成,你回调方法中渲染页面完成后赋值dataflag为false.这样就不会同时执行两次方法了。
用定时器事件,5秒轮询,在这个里面做个判断,如果在5秒内用户有自己做操作的话清楚定时器,否则再次开启定时器