博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于利用ajax时,设置访问延时的方法
阅读量:4552 次
发布时间:2019-06-08

本文共 1026 字,大约阅读时间需要 3 分钟。

在实际开发中应使用后端的延时方法,一般为sleep,可以设置延时几秒后返回给前端请求的数据

 

众所周知,在js中,并不存在例如C++或者JAVA、PHP中的sleep延时方法,

目前仅有的所谓延时方法SetTimeout和setInterval等方法看似延时,其实是伪延时。

拿setTimeout来说,当你执行setTimeout("functionA",30)的时候,你希望的是当前进程停留30ms,然后执行下一步。但其实js在执行setTimeout的时候,只是创建了一个新的线程,在这个线程中等待30ms然后执行A函数。也就是说如果你在当前进程setTimeout之后,当前进程会直接执行之后的语句,而新线程等待30ms之后执行A函数,这显然不符合我们的要求。因为当我们设置延时的目的,是等待ajax返回正确的数据,由于延时函数直接返回,之后的代码被立即执行,我们的目的就无法达成。
当然我们可以在A函数中写入所有和AJAX所获得数据相关的代码,但是由于异步AJAX要多久才能获得数据我们并不知晓,并且在不同的服务器情况下,所需要的时间也不同,所以我设计了如下的方法来兼顾延时和数据检测。
我们一样定义一个函数A,用于延时执行,当我们在主进程中执行timeout函数之后,主进程当前函数返回。30ms后延时函数线程启动,A函数被执行。我们设计一个全局变量,用于检测AJAX返回数据的情况(比方说返回的数据数组为空),然后在A函数中,递归调用A函数,即在A函数中若检测到AJAX数据不正确(比方说时间不够没获取到),则调用setTime函数递归执行A函数。当然别忘记了在setTime函数之后,加上return,否则后续函数就会被执行。
这样一来,当且仅当AJAX获得的数据正确,我们才会继续执行,从而达到了延时获取数据的目的。另外由于AJAX访问的是JSP,所以最好在写完JSP以后,利用jsp_precompile方法预编译成.class文件。不过在我的项目中,这个预编译方法并没有得到太好的执行效率提升,服务器开启第一次访问依然非常慢,所以才想到利用settimeout递归调用的方法
要注意的是,延时千万不要用for或者while循环,因为主进程永远不可能被暂停挂起,所以这样的结果只会是使主进程死循环,浏览器CPU占用100%卡死

转载于:https://www.cnblogs.com/zhangruiqi/p/7850559.html

你可能感兴趣的文章
Cocos2d-x
查看>>
FIR滤波器设计
查看>>
1005 继续(3n+1)猜想 (25 分)
查看>>
Python爬虫学习笔记之极限滑动验证码的识别
查看>>
27-删除元素
查看>>
开发Android系统内置应用小记
查看>>
Struts 1之DispatchAction
查看>>
mongodb
查看>>
可以不改MD5程序内容吗?可以!
查看>>
关于weight属性使用的一些细节
查看>>
Mybatis源码研究1:从JDBC到Mybatis
查看>>
Solr
查看>>
键盘录入一串字符并取出做字符序列,计算各个字符的个数
查看>>
23 python多线程threading及线程同步
查看>>
Django之ModelForm
查看>>
简单的requestAnimationFrame动画
查看>>
hdoj-3791-二叉搜索树(二叉搜索树模板题)
查看>>
【裴蜀定理】[HAOI2011]向量
查看>>
os模块
查看>>
Windows下启动停止Oracle11g服务-为解决系统变慢而生
查看>>