setTimeout与setInterval实战之定时刷新

摘要:
这仍然是考试系统中最后一次需要定期刷新考生界面的列,以确保信息的及时反馈。当时,没有很好的方法来实现它,所以我们使用了ajax+setTimeout。首先,我们来谈谈setTimeout和setInterval之间的用法和区别:use:它只是在js中直接调用这两个方法。这是窗口对象的两种主要计时方法,表达式粉末是setTimeout(表达式,延迟时间);SetInterval(表达式,交互

仍然是上次的考试系统中在考生界面那一栏需要实现定时刷新,以保证信息的及时反馈,当时也没有什么好的实现方式,就使用了ajax+setTimeout来实现了,

先来说下setTimeout与setInterval的使用与区别:

使用:就是直接在js中调用这两个方法就可以了,这是window对象有两个主要的定时方法,表达式粉分别为

setTimeout (表达式,延时时间);
setInterval(表达式,交互时间);
延时时间/交互时间是以豪秒为单位的(1000ms=1s)

两种的表达式很相似,但功能还是有很大的区别的,从参数的表达也能看出:
setTimeout  在执行时,是在载入后延迟指定时间后,去执行一次表达式,仅执行一次
setInterval 在执行时,它从载入后,每隔指定的时间就执行一次表达式

那么使用之后如何将其清除呢:可以使用下面的方法,由于每次调用这两个方法后都有一个唯一的id进行返回,因此我们只要根据这个唯一的id来将其清除即可

如:var id = setTimeout(show() ,1000);

  clearTimeout(id);

如:var id=setInterval(show(),1000);

  clearInteval(id);

实战页面:

setTimeout与setInterval实战之定时刷新第1张

这里使用的是复选框进行勾选来表示是否需要进行20秒自动刷新,页面打开时是默认为选中状态,即定时刷新

实现方案是:在页面加载时调用timingRefresh()方法,

<script type="text/javascript" language="javascript">
  $(document).ready(function() {
      //if($("#shuaxin").attr("checked") == true){
          //alert("选中");
          timingRefresh();                //表示是选择状态
          //未完待续
      //}else{
          //alert(未选中);
      //}
  });
  </script>

timingRefresh()实现:

 //页面的定时刷新
 var timeID;                //这个是定时器返回的id,必须设置为全局变量,否则不能正确取消        
 function timingRefresh(){
     window.clearTimeout(timeID);                                    //每次调用该方法前先将原先那个定时器取消
     if($("#shuaxin").attr("checked") == true){
         /**
          * 在这个环境下还是用setTimeout合适,以为页面端会有一个js函数在页面加载完后调用该函数的,
          * 如果选用window.setInterval,那么每次重载后都会出现一个对象,这个就会无法控制了,而
          * setTimeout函数继续完此次后就结束了,重载后又出现一个,用在这里非常合适
          * */
         timeID = setTimeout("examineeSearch(1, 'examineeListAction.action')", 20000);            //只是过20秒后刷新一次就结束了    
         //timeID = window.setInterval("examineeSearch(1, 'examineeListAction.action')", 5000);            //每5秒自动刷新一次
     }else{
         //alert("设置为false");
         //window.clearInterval(timeID);                                //取消刷新
         window.clearTimeout(timeID);
     }
 }

大家可以好好的琢磨下上面的实现方法:我选择了setTimeout()方法而非setInterval();原因就是我每次页面加载完后都会来调用这个方法,然后判断是否复选框被选择
如果被选择了,就设定20秒后进行刷新,只刷新一次,如果采用没20秒刷新一个的话,那么每次页面加载完后我调用该方法后,其实是又一次的调用了setInterval(),那么

几次页面刷新后,其实已经产生了n多个timeID了,每个timeID在20秒后都执行一次刷新,那后果可想而知,因此以后大家在使用这两个函数时必须要根据实际情况进行选定,

而不能一味根据函数的定义进行选择。

还有这个方法里面调用的ajax方法我也一并写出来了,大家如果对ajax的实现有问题,可以看http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452670.html

//页面的查询功能
 function examineeSearch(type, tagAction){
     if(type == 0){                                        //表示要显示刷新的标准
         var jiazai = document.getElementById("jiazai");//显示加载标志符
     }
    var claId = $("#claId").val();                        //班级id
    var examId = $("#examId").val();                    //考试的id
    var examineeStatus = $("#examineeStatus").val();    //考试的状态
    var subjectiveStatus = $("#subjectiveStatus").val();//主观题的批阅情况
    var resultOrder = $("#resultOrder").val();            //成绩排序
    var content = $("#searchinput").val();                //查询的内容
    if(content == "- - -学号|IP关键字- - -"){
        content = 0;
    }
    //alert(claId);
    //alert(claId+examId+examineeStatus+subjectiveStatus+resultOrder+content);
    $("#middle").load(tagAction,{
            sendTime: (new Date()).getTime(),
            claId: claId,
            examId: examId,
            examineeStatus: examineeStatus,
            subjectiveStatus: subjectiveStatus,
            resultOrder: resultOrder,
            content: content
    });
    jiazai.innerHTML += "已成功刷新";
 }

这里的ajax是机遇struts2的,实现比较简单

免责声明:文章转载自《setTimeout与setInterval实战之定时刷新》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇3、sql 表的连接nginx编译安装支持lua脚本下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

easyUI详解

1、EasyUI 是前端框架,封装大量 css和封装大量 JS 2、使用前端框架时,给标签定义class 属性,就会有样式和脚本功能了 3、data-options 属性是定义 easyui 属性的,如果 easyui 提供的属性和 html 标签属性相同,这个属性可以不写在 data-options 中 4、如果效果是静态的建议使用纯 html 标签方式...

JSON.stringify 语法讲解 随风浪迹天涯 博客园

JSON.stringify 语法讲解 认识javascript也不短的时间了,可是这个用法说实在的,我还是第一次见过,惭愧啊惭愧啊。于是乎,在网上找了写资料,写了些例子 希望能给园子们一些帮助。 作用:这个函数的作用主要是为了系列化对象的。 可能有些人对系列化这个词过敏,我的理解很简单。就是说把原来是对象的类型转换成字符串类型(或者更确切的说是json...

JavaScript初学指南

目录: 包含与引入(Embedding,including) write 和 writeln 文档对象(document object) bgColor 和 fgColor 消息框(Message Box) 变量(Variables)和条件(Conditions) 函数(Function) onClick onLoad onUnload 表单(Form)...

javascript ES6 新特性之 Promise,ES7 async / await

es6 一经推出,Promise 就一直被大家所关注。那么,为什么 Promise 会被大家这样关注呢?答案很简单,Promise 优化了回调函数的用法,让原本需要纵向一层一层嵌套的回调函数实现了横向的调用,也就是链式调用。 我们先来看下面的代码: 1 function getData(){ 2 setTimeout(()=>{ 3...

JS周期函数setInterval

周期函数setInterval():按照指定的周期(以毫秒计)来调用函数或计算表达式。 1.JS中内置的Date支持类:可以用来获取事件/日期 显示网页时钟 nowdate=nowdate.toLocaleString(); //转换成本地日期格式 var year=nowTime.getFullYear(); //返回年信...

SWIFT推送之本地推送(UILocalNotification)

SWIFT推送之本地推送(UILocalNotification)本地推送通知是通过实例化UILocalNotification实现的。要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户。 1.首先在didFinishLaunchingWithOptions方法内添加代码,IOS8推送消...