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

    在设备驱动收包之后,会通过netif_receive_skb将收取的包,按照注册的协议回调,传递到上层进行处理: /* 将skb传递到上层 */ static int __netif_receive_ ...

  2. for 、forEach 、 forof、 forin遍历对比

    一.遍历内容的异同 1.for 和 for...in 是针对数组下标的遍历 2.forEach 及 for...of 遍历的是数组中的元素 二.对非数字下标的处理 由于array在js中也是对象中的一 ...

  3. Linux中涉及到环境变量的文件

    1. 系统级 (a) /etc/profile : 在用户登录操作系统时,定制用户环境的第一个文件,应用于登录的每一个用户 ==> 该文件一般调用/etc/bash.bashrc文件 (b)/e ...

  4. MYSQL三种安装方式--二进制包安装

    1. 把二进制包下载到/usr/local/src下 2. 如果是tar.gz包,则使用tar zxvf 进行解压 如果是tar包,则可以使用tar xvf 进行解压 3. $ mv mysql-5. ...

  5. Linux下通过源码编译安装程序(configure/make/make install的作用,然后在/etc/profile文件里修改PATH环境变量)

    一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件:就是通常我们见到的lib目录下的文件 配置文件:这个不必多说,都知道 帮助文档:通常是我们在 ...

  6. Linux硬链接和软连接的区别与总结

    图示软硬链接的区别 有关硬链接的总结 具有相同inode节点号的多个文件互为硬链接文件: 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除: 只有删除了源文件和所有对应的硬链接文件,文件实体才 ...

  7. C语言调用正则表达式

    标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库 ...

  8. 51Nod 1352 集合计数(扩展欧几里德)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1352 题目大意: 给出N个固定集合{1,N},{2,N-1} ...

  9. HDU 5348 MZL's endless loop(DFS去奇数度点+欧拉回路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题目大意:给你一张图,有n个点,和m条无向边,让你把m条无向边变成有向边,使得每个节点的|出度- ...

  10. C++的一大误区——深入解释直接初始化与复制初始化的区别

      转自:http://blog.csdn.net/ljianhui/article/details/9245661 不久前,在博客上发表了一篇文章——提高程序运行效率的10个简单方法,对于其中最后一 ...