在实际开发中应使用后端的延时方法,一般为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%卡死

关于利用ajax时,设置访问延时的方法的更多相关文章

  1. onsubmit校验表单时利用ajax的return false无效解决方法

    代码: function checkNewEmail(){ var re_email=new RegExp("\\w+@\\w+\\.\\w+\\.?\\w*"); var new ...

  2. onsubmit校验表单时利用ajax的return false无效解决方法-转

    原来的代码 function checkNewEmail(){ var re_email=new RegExp("\\w+@\\w+\\.\\w+\\.?\\w*");      ...

  3. loadrunner运行时设置中清空缓存方法

    用函数web_cache_clearup()或run-time settings---browser emulation 把clear  cache on each iteration打勾 W v\] ...

  4. Struts2 利用AJAX 导出大数据设置遮罩层

    Struts2 利用AJAX 导出大数据设置遮罩层 需求背景: 每次我们导出excel的时候 ,如果数据量很大,导出花费的时间会很长,页面却有没人任何反应,这个时候用户会认为系统有问题,要么关了页面, ...

  5. Hbuilder编辑App时,ajax跨域访问失败问题

    今天试着用Hbuilder写app的前段显示页面,在第一步时就被打住了,ajax异步调用服务器的登录接口时,报错, 显示这样的错误 XMLHttpRequest cannot loadhttp://w ...

  6. ajax传JSON时设置的contenttype导致JAVA中request.getParameter("")怎么也接收不到数据

    ajax传JSON时设置的contenttype默认值是application/x-www-form-urlencoded, 当ajax传JSON时设置的contenttype 如果是applicat ...

  7. Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)

    原文:Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇) 老话说的好:好记心不如烂笔头! 本着这原则,我把最近工作中遇到的jquery利用ajax调用web服务的 ...

  8. 浅析JSONP-解决Ajax跨域访问问题

    浅析JSONP-解决Ajax跨域访问问题 很久没有写随笔了,总是感觉没时间,其实时间就是...废话少说,前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现 ...

  9. MongoDB设置访问权限、设置用户(转)

    MongoDB已经使用很长一段时间了,基于MongoDB的数据存储也一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),今天特地花了一点时间研究了一下,研究成果如下: 注:研究成果基于W ...

随机推荐

  1. scandir函数的研究【笔记】

    以下是本人的学习笔记,代码并非原创,均摘自官方源码,贴出来仅供学习记录用 scandir 的使用要注意内存泄漏的问题 scandir函数实现: vi ./uClibc-0.9.33.2/libc/mi ...

  2. redis的备份恢复

    说明:默认rdb方式保存,redis支持主从和哨兵等,但是在某些情况下我们会单机跑,所以有时候我们就会需要设计到备份恢复 环境:原始redis:192.168.1.200 新redis:192.168 ...

  3. [SVN技巧]代码提交中遇到的两个问题及其解决方案

    前言 SVN在使用的过程中会遇到各种各样的问题,小黑在最近的使用中,遇到如下的两个问题,这里贴出来供大家参考 问题记录 SVN在源码仓库中不存在,导致无法删除和上传 问题提示: Working cop ...

  4. Delphi 绘图对象

    来自:http://blog.csdn.net/lailai186/article/details/8755430 ========================================== ...

  5. spring boot 扩展之AutoConfigurationImportListener

    最近阅读spring boot源码时发现,发现当spring使用ConfigurationClassParser加载使用@Configuration注解类后,会使用AutoConfigurationI ...

  6. 双缓冲解决控制台应用程序输出“闪屏”(C/C++,Windows)

    使用 C 语言编写游戏的小伙伴们想必起初都要遇到这样的问题,在不断清屏输出数据的过程中,控制台中的输出内容会不断地闪屏.出现这个问题的原因是程序对数据处理花掉的时间影响到了数据显示,或许你可以使用局部 ...

  7. Java-redis分布式锁 抢购秒杀系统 实现

    一.使用分布式锁要满足的几个条件: 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现) 共享资源(各个系统访问同一个资源,资源的载体 ...

  8. 转:xxe attack学习

    小结 1.http包发送类型:content-type:text/xml2.xxe漏洞非常危险, 因为此漏洞会造成服务器上敏感数据的泄露,和潜在的服务器拒绝服务攻击.要去校验DTD(document ...

  9. [GYM 100492A] Average Convex Hull 凸包好题

    大致题意: 给出一个点集,其中有一个点有相同的几率会被删除,求删除之后的点集够成的凸包上的点的平均数. 首先看到题目,可以考虑枚举删除的点,将其凸包上前后两点以及两点间凸包内所有点构建凸包,因为凸包内 ...

  10. Coding.net进阶,使用Git管理代码

    原文来自:http://conw.net/archives/18/ (我自己的博客,点击链接查看文章最新版本) Git是目前最流行的版本控制系统,这里以GitHub为例,介绍git的基本使用. Git ...