在实际开发中应使用后端的延时方法,一般为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. MGR Switch Muti-Primary to single_primary

    MGR Muti-Primary 切换 single_primary 模式 原因:因为希望做ProxySQL+MGR之间Proxy层的消耗测试,需要把原有的MGR多主改为单主模式. 修改MGRgrou ...

  2. grep 中的正则表达式【转】

    正则表达式 正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列.下面是范例: ^w1 w1|w2 [^ ] grep 正则表达式示例 在 /etc/passswd 目录中搜索 'vivek ...

  3. 一张图总结html5新特性

  4. Reverse Nodes in k-Group——简单的指针问题

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  5. Java学习笔记()ArrayList

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...

  6. 【重点】Jmeter----- 将 JDBC Request 查询结果作为下一个接口参数方法(二)

    一.说明 jmeter与数据库mysql已连接成功 二.需求 1.前置条件: 1.已user数据库的前8位手机号码作为行动计划的名称 2.行动计划的日期是2018-10-17 2.操作步骤: 1)获取 ...

  7. 4款Github泄漏敏感信息搜索工具简单比较

    gitrob Ruby开发,支持通过postgresql数据库https://github.com/michenriksen/gitrob weakfilescan Python开发,多线程,猪猪侠开 ...

  8. Ubuntu编译安装nginx,php,mysql

    摘要: 整理的Ubuntu编译安装nginx,php,mysql的步骤,主要来自对驻云的sh-1.4.1中脚本的整理,随时代进步,内容中的软件或者命令请自行更新 目录准备 创建用户 userdel w ...

  9. 洛谷P0248 [NOI2010] 超级钢琴 [RMQ,贪心]

    题目传送门 超级钢琴 题目描述 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符 ...

  10. UIViewController的基本概念与生命周期

    UIViewController是iOS顶层视图的载体及控制器,用户与程序界面的交互都是由UIViewController来控制的,UIViewController管理UIView的生命周期及资源的加 ...