在实际开发中应使用后端的延时方法,一般为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. Spring源码解读Spring IOC原理

    一.什么是Ioc/DI? IoC 容器:最主要是完成了完成对象的创建和依赖的管理注入等等. 先从我们自己设计这样一个视角来考虑: 所谓控制反转,就是把原先我们代码里面需要实现的对象创建.依赖的代码,反 ...

  2. 清理oracle的用户中的日志垃圾以及修改sys用户的密码

    清理oracle的用户中的日志垃圾1.进入:/opt/oracle/product/11g/network/admin目录2.注释掉listener.ora文件中的TRACE_LEVEL_LISTEN ...

  3. selenium grid结构图

    调用 Selenium-Grid 的基本结构图如下: 上面是使用 selenium-grid 的一种普通方式,仅仅使用了其支持的分布式执行的功能,即当你同时需 要测试用例比较多时,可以平行的执行这些用 ...

  4. QWT编译、配置、使用(Qt Creator)

    环境: Win7 32 bit / Qt Creator 3.3.1 / Qt 5.4.1 (msvc2013_opengl, 32 bit) / QWT 6.1.2 QWT, Qt Widgets ...

  5. Python——文件打开模式辨析

    版权声明:本文系原创,转载请注明出处及链接. Python中,open()函数打开文件时打开模式如r.r+ .w+.w.a.a+有何不同 r 只能读 r+ 可读可写,不会创建不存在的文件.如果直接写文 ...

  6. Linux文件访问和日志

    一.文件系统创建一个文件的过程假设我们想要新增一个文件,此时文件系统的行为是:先确定用户对于欲新增文件的目录是否具有 w 与 x 的权限,若有的话才能新增:根据 inode bitmap 找到没有使用 ...

  7. CodeForces 909D Colorful Points

    题解: 暴力,模拟. 把字符串压缩一下,相同的处理成一位,记录下个数,然后暴力模拟即可. #include <bits/stdc++.h> using namespace std; con ...

  8. HDU 6183 Color it

    线段树. 假设只有一种颜色,因为每次询问有一个$x$一定是$1$,那么我可以想办法找出每一个$y$最小的$x$是多少,如果最小的都不符合,那么一定不符合,因为更新变成了单点更新,询问是区间询问最小值, ...

  9. python log的处理方式

    python log的处理方式 配置文件 #! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "Q1mi" ...

  10. Servlet技术——Servlet基础

    Servlet是运行在Web服务器端的Java应用程序,它使用Java语言编写,具有Java语言的优点.与Java程序的区别是,Servlet对象主要封装了对HTTP请求的处理,并且它的运行需要Ser ...