setinterval 和 setTimeout调用方式以及浏览器缓存问题
js中setinterval 和 setTimeout 可以做定时器,这个大家都知道,
关于这两个方法的区别,网上也有很多文章说的很清楚。
在此我还想说一说2个问题:
1,关于调用方式的书写。
比如:
function showCallInAndOut(){
//xxx
}
//setTimeout("showCallInAndOut()",1000);
//setTimeout(showCallInAndOut,1000);
上面的这两中调用方式都是对的!!!
如果第一个参数是字符串,那里面的方法名需要带括号;
如果第一个参数是变量,就直接写变量名(方法名),不能带括号。
下面是例子,包括传参的调用:
<html>
<head>
<title> New Document </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery-1.7.1.js" type="text/javascript"></script>
</head>
<body>
<input type="text" value="" id="inter"/>
</body>
</html>
<script>
var aaa=1;
function showCallInAndOut(){
$("#inter").val("showCallInAndOut调用"+aaa+"次");
aaa++;
}
var bbb=1;
function sayHi(word){
$("#inter").val("sayHi调用"+bbb+"次,参数是:"+word);
bbb++;
}
//setInterval("showCallInAndOut()",1000); //正确
//setInterval(showCallInAndOut,1000); //正确
//setTimeout("showCallInAndOut()",1000); //正确
//setTimeout(showCallInAndOut,1000); //正确
//传参的调用方式
var param="hi,gril!";
//setInterval("sayHi(param)",1000);//这个方式可以传参
//setInterval(sayHi,1000); //这个方式不能传参
//setTimeout("sayHi(param)",1000);//这个方式可以传参
//setTimeout(sayHi(param),1000);//这个方式不能传参
/*
传参的调用方式结果已经很明了了。
从结果我们可以猜想,如果传入字符串,那浏览器在底层可能调用了eval()方法。
如果传入变量,就直接调用这个变量,至于这个为什么不能传参,就不清楚了。
*/
</script>
2,关于在ajax做定时器调用的问题(每个一段时间发请求)。
假如我们要刷新页面上某个值,并且需要不断地,时时的刷新,大家都会想到
利用js的定时器不断发ajax请求,在回调函数中巴页面上的值改变这个思路。
在实际项目中,我遇到一个问题:
我使用setInterval定时调用一个方法showCallInAndOut(),
这个方法就是一个ajax。奇怪的是有时候定时刷新很正常,这和我初始的思路一致,
有时候,定时刷新就没有效果,我在后台打上断点,输出打印都没反应。
开始我以为是setInterval出了问题,就在这个方法里加了一行计数:
$("#inter").val("showCallInAndOut调用"+aaa+"次");
aaa++;
记过页面上这个aaa是一直变化的,也就是说setInterval一直正常!
那问题只能是里面的方法showCallInAndOut()有问题!
这个方法就是ajax,没什么特别的,可就是不调用,我甚至在页面加个按钮
直接调用这个showCallInAndOut()也没反应。
后来,我在页面初始化的时候调一下showCallInAndOut()刷新页面某个值。
然后再调用setInterval,当然这个setInterval里面还是调用showCallInAndOut()。
接着我再测试的时候发现,页面初始化时会调用,但是setInterval里面的却不调用!当我改变
数据库中的值,再刷新页面,这两个都不调用!
url绝对是正确的,为什么就不调用呢?由此我突然想到浏览器的缓存!
所以我在url后面加上一个随机参数。在页面初始化那个方法里不加随机参数,
在setInterval里面的方法加上随机参数。
结果:
2-1,初次进入那个页面:
页面初始化会调用,setInterval也调用。
2-2,我改变数据库的值,刷新那个页面时:
页面初始化会不调用,setInterval调用!
而且页面首先会显示前一次的数值!过了定时的那几秒后就会显示数据库实际的数值!
结果很明显,js方法肯定会调用,但是ajax请求不一定走!
为什么呢?浏览器缓存!
在ajax中请求的url在浏览器中是会留下缓存的!如果浏览器发现新的请求和以前的请求一模一样,
浏览器就直接把缓存中的结果拿出来了,这个请求就不走了。这不是什么新鲜的问题,我以前
也遇到过,就是在做图片上传的时候,第一次用户上传一张图片,在点击提交前又想改换另外一张图片(名字
是一样的),我在后台把图片名字改成用户的名字,这样图片的url总是一样的,即使真的上传了改变后的
图片,页面上还显示改变前的那一张!在url后面加上随机参数就没有问题了。归根到底,就是
浏览器缓存的问题。他认为你的请求或者url是和前面一样的,他就直接拿结果!ajax也一样!
就像我这一次做的2-2,之所以先显示以前的值(数据库已经变值了),页面还能显示出来,后后面
setInterval请求中我都加了随机参数,结果就显示正确的,后台代码也能走,这就是很清楚了。
页面初始化的那个url已经在浏览器有了缓存,你刷新页面,走这个方法时,ajax就没走,直接从缓存中取;
后面的setInterval请求url因为有了随机参数使url每次都不一样,浏览器只能重新发送请求,这样取到的值
就是正确的,数据库实际的值。
至于为什么不加随机参数时有时候setInterval能正常走,有时候不能原因就是:
正常走的情况浏览器没有缓存,不正常的时候是有了缓存。
那什么情况下浏览器才会留下缓存呢?这个哥们就不清楚了。
页面的url和请求最好加上随机变量,这样就会很有效地避免一些“诡异”问题,算是培养
良好的编码习惯吧。
至于随机参数,在这里我也说一下吧。
其实很简单,在url后面加一个参数。
比如:
"xxxxx/voice/getCallInInfo.action?ss=aaa";
这个ss如果是随机的,就可以。
在js中,我比较喜欢这样:
url: "<%=path%>/voice/getCallInInfo.action?ss="+Math.random()
在jsp中,就更好办了,利用日期,随机数等等生成一个无规律的字符串加在url后面就可以。
分享到:
相关推荐
GUI面板MATLAB香烟汉字识别
2023年统招专升本计算机考试真题及答案6.pdf
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
Java 项目, Java 毕业设计,Java 课程设计,基于 SSM 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:vue/html5 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)
MATLAB设计的危险区域预警系统(GUI界面设计)
2023年江苏省计算机二级VB试卷.pdf
NSCBx1.0.1b Keys19.0.0.zip
智慧园区,作为现代化城市发展的新兴模式,正逐步改变着传统园区的运营与管理方式。它并非简单的信息化升级,而是跨越了行业壁垒,实现了数据共享与业务协同的复杂运行系统。在智慧园区的构建中,人们常常陷入一些误区,如认为智慧园区可以速成、与本部门无关或等同于传统信息化。然而,智慧园区的建设需要长期规划与多方参与,它不仅关乎技术层面的革新,更涉及到管理理念的转变。通过打破信息孤岛,智慧园区实现了各系统间的无缝对接,为园区的科学决策提供了有力支持。 智慧园区的核心价值在于其提供的全方位服务与管理能力。从基础设施的智能化改造,如全面光纤接入、4G/5G网络覆盖、Wi-Fi网络及物联网技术的运用,到园区综合管理平台的建设,智慧园区打造了一个高效、便捷、安全的运营环境。在这个平台上,园区管理方可以实时掌握运营动态,包括道路状况、游客数量、设施状态及自然环境等信息,从而实现事件的提前预警与自动调配。同时,智慧园区还为园区企业提供了丰富的服务,如项目申报、资质认定、入园车辆管理及统计分析等,极大地提升了企业的运营效率。此外,智慧园区还注重用户体验,通过信息发布系统、服务门户系统及各类智慧应用,如掌上营销、智慧停车、智能安防等,为园区员工、企业及访客提供了便捷、舒适的生活与工作体验。值得一提的是,智慧园区还充分利用大数据、云计算等先进技术,对园区的能耗数据进行采集、分析与管理,实现了绿色、节能的运营目标。 在智慧园区的建设过程中,还涌现出了许多创新的应用场景。例如,在环境监测方面,智慧园区通过集成各类传感器与监控系统,实现了对园区水质、空气质量的实时监测与预警;在交通管理方面,智慧园区利用物联网技术,对园区观光车、救援车辆等进行实时定位与调度,提高了交通效率与安全性;在公共服务方面,智慧园区通过构建统一的公共服务平台,为园区居民提供了包括平安社区、便民社区、智能家居在内的多元化服务。这些创新应用不仅提升了园区的智能化水平,还为园区的可持续发展奠定了坚实基础。同时,智慧园区的建设也促进了产业链的聚合与发展,通过搭建聚合产业链平台,实现了园区内企业间的资源共享与合作共赢。总的来说,智慧园区的建设不仅提升了园区的综合竞争力,还为城市的智慧化发展树立了典范。它以用户需求为导向,以技术创新为驱动,不断推动着园区向更加智慧、高效、绿色的方向发展。对于写方案的读者而言,智慧园区的成功案例与创新应用无疑提供了宝贵的借鉴与启示,值得深入探索与学习。
一、系统需求分析 1 (一)需求概述 1 (二)业务流分析 1 (三)数据流分析 3 (四)数据字典 3 二、数据库概念结构设计 5 (一)实体分析 5 (二)属性分析 5 (三)联系分析 6 (四)概念模型分析(.PDM图) 7 三、数据库逻辑结构设计 8 (一)概念模型转化为逻辑模型 8 1.一对一关系的转化 8 2.一对多关系的转化 8 3.多对多关系的转化 8 (二)逻辑模型设计(.PDM图) 8 四、数据库物理实现 9 (一)表设计 9 (二)创建表和完整性约束代码设计 10 (三)创建视图、索引、存储过程和触发器 11 五、数据库功能调试 12 (一)职工管理模块 12 (二)工程负责人管理模块 13 (三)系统管理员管理模块 15 六、设计系统前台软件 20 (一)开发软件选择 20 (二)软件功能要求与设计 21 (三)软件功能实现 21 (四)系统测试 27 七、设计总结 28
ava项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文
【人机交互】MATLAB手势识别设计
【工程项目】MATLAB的人脸+指纹融合系统(结合人脸和指纹一致性方可通行)
2023年历年真题考试:管理系统中计算机应用历年真题汇编(共207题).pdf
ava项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文
【人机交互】MATLAB信号与系统数字信号设计
Delphi 12.3控件之Chatbox-1.9.8-Setup.rar
HD_Speed是一款非常小巧好用的实时磁盘读取速度测试软件。它可以比较准确地测试到磁盘的持续传输率和突发传输率一定程度上反映系统的磁盘性能,可以测试软盘、硬盘、光驱。并用曲线图方式体现出来,用它可以很直观的看出您的硬盘到底有多快而且也可以很方便的看出光驱的加速曲线。并且作为一款免费软件,测试也相当简单,大家有兴趣可以测试一下自己的磁盘性能。 HD_Speed绿色版 HD_Speed绿色版功能介绍 ●任何目录可以在Finder(即在本地机器上,一个外部驱动器或远程服务器上)可以选择立即分析。 ●自由航行在一个文件夹或子目录的分析装置。 ●平滑的动画之间的转换选定的目录管理。 ●移动鼠标到一个文件中看到它的名称和尺寸。 ●使用上下文菜单中选择文件的垃圾。 ●快速搜索文件名。 ●保存您最喜爱的位置和访问他们在主窗口中单击。
Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4
GUI面板MATLAB芯片字符识别