php ajax队列,AJAX请求队列实现

这篇文章主要为大家详细介绍了AJAX请求队列的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

AJAX在使用的过程中会遇到一个问题,当用户短时间内执行了多个异步请求的时候,如果前一个请求没完成,将会被取消执行最新的一个请求,大多数情况下,不会有什么影响,例如请求了一个新的列表,旧的请求也就没什么必要了 ,但是,当我们的WEB程序需要同时异步调用多个请求,或者需要用户请求的是不同类型的数据,都需要执行完成的时候就出现问题 了,于是,将用户的请求记录下来,并按顺序执行。

不同的浏览器,允许同时执行的线程不同,通常IE允许两个线程,于是,当同时执行的异步请求超过两个时,就会变成只执行最新的两个。

AJAX队列很简单,创建一个数组存储请求队列,数组中每一项又是一个请求参数数组,当用户执行请求时,不是直接执行AJAX,首先将参数作为一个数组作为项再存入队列,检查队列中是否存在多个请求,如果没有,直接执行当前队列中这唯一的一项,如果有则不执行(因为有其他项,说明队列还在执行中,不必着急,其他项执行完了会轮到这一项的),AJAX执行完成后就删除当前执行的队列项,然后再检查数组还有没有请求,有就继续执行到所有请求都完成为止,以下是我构建的一个队列,AJAX部分是之前封装的。

//Ajax Function

var reqObj; //Creat Null Instence

var RequestArray = new Array();

//var whichRequest;

//加入请求队列

function AddRequestArray(url,isAsy,method,parStr,callBackFun)

{

var ArgItem = new Array();

ArgItem[0]=url;

ArgItem[1]=isAsy;

ArgItem[2]=method;

ArgItem[3]=parStr;

ArgItem[4]=callBackFun;

RequestArray.push(ArgItem); //将当前请求添加到队列末尾

if(RequestArray.length==1) //如果请求队列里只有当前请求立即要求执行队列,如果有其他请求,那么就不要求执行队列

{

ExeRequestArray();

}

}

//执行队列里的顺序第一个的请求

function ExeRequestArray()

{

if( RequestArray.length>0) //如果队列里有请求执行 AJAX请求

{

var ArgItem = RequestArray[0]; DoRequest(ArgItem[0],ArgItem[1],ArgItem[2],ArgItem[3],ArgItem[4]);

}

}

//Run Ajax (string urladdress,bool IsAsy,string method,string parameters,string whichRequest)

function DoRequest(url,isAsy,method,parStr,callBackFun)

{

reqObj = false;

//whichRequest = whichReq;

if (window.XMLHttpRequest) //compatible Mozilla, Safari,...

{

reqObj = new XMLHttpRequest(); //Creat XMLHttpRequest Instance

if (reqObj.overrideMimeType) //if Mime Type is false ,then set MimeType 'text/xml'

{

reqObj.overrideMimeType('text/xml');

}

}

else if (window.ActiveXObject) //compatible IE

{

try

{

reqObj = new ActiveXObject("Msxml2.XMLHTTP"); //Creat XMLHttpRequest Instance

}

catch (e)

{

try

{

reqObj = new ActiveXObject("Microsoft.XMLHTTP"); //Creat XMLHttpRequest Instance

}

catch (e)

{}

}

}

//if reqObj is false,then alert warnning

if (!reqObj)

{

alert('Giving up :( Cannot create an XMLHTTP instance');

return false;

}

reqObj.onreadystatechange = function(){GetRequest(callBackFun)}; //set onreadystatechange Function

reqObj.open(method, url, isAsy); //set open Function

reqObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); //set RequestHeader

reqObj.send(parStr); //do send and send parameters

}

//get Service Response information Function

function GetRequest(callBackFun)

{

//judge readystate information

if (reqObj.readyState == 4)

{

//judge status information

if (reqObj.status == 200)

{

eval(callBackFun+"(reqObj)");

}

else

{

alert('There was a problem with the request.'+reqObj.status+"CallFunction:"+callBackFun); //else alert warnning

}

RequestArray.shift(); //移除队列里的顺序第一个的请求,即当前已经执行完成的请求

ExeRequestArray(); //要求执行队列中的请求

}

}

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php Spreadsheet 导出,PhpSpreadsheet 导出Excel

/*** Excel 助手* sudo composer require phpoffice/phpspreadsheet*/namespace CommonUtil;use PhpOfficePhpSpreadsheetSpreadsheet;use PhpOfficePhpSpreadsheetWriterXlsx;use PhpOfficePhpSpreadsheetStyleAlignment;use PhpOfficePhpSpreadsheetStyleColor;class ExcelUt…

php 不同时区时间转换,在PHP中将DateTime字符串转换为不同的时区

好吧,我有以下代码$from "Asia/Manila";$to "UTC";$org_time new DateTime("2012-05-15 10:50:00");$org_time $org_time->format("Y-m-d H:i:s");$conv_time NULL;$userTimezone new DateTimeZone($from);$gmtTimezone new…

php iis ajax 无效,IIS7中Ajax.AjaxMethod无效的原因及解决方法

最近做用Ajax.AjaxMethod方法的时候,在asp.net的服务器下一切正常,用iis的时候,js中总是cs类找不到,我就郁闷了,折腾了大半天,终于找到错误原因了。因为我发布网站用的是iis7,所以在web.config位…

查看oracle监听服务器,处理Oracle 监听文件listener.log问题

如果连接时候变得较慢 查看Oracle日志记录,可能是因为此文件太大,超过2G,需要定期清理,(如果多用户,记得用root,可能没权限)查看listener.log?find / -name listener.log经查看,竟然…

oracle添加伪列,Oracle伪列 - jifengtang的个人空间 - OSCHINA - 中文开源技术交流社区...

在oracle10g和下,伪列包括如下内容:lHierarchical Query Pseudocolumns分级查询是oracle提供的递归查询语法,在这里不做展开。只有在分级查询下,才可以使用以下伪列:1.CONNECT_BY_ISCYCLE Pseudocolumn2.CONNECT_BY_IS…

美国oracle球场,美国体育馆考察——美国体育产业是如何盈利的?

体育是美国一项较高利润的产业,其发展规模、发展水平和效益都是世界一流的。美国体育馆考察,主要考察美国体育产业的盈利模式和体育赛事的赞助模式以及球馆的运营管理,并对比中美体育产业的差异,从中获得先进的体育产业运营思维&a…

php集成环境怎么打开,PHP集成开发环境PhpStorm快速入门指南(二):打开一个项目...

PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查。可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能。PhpStorm 2019.…

如何查询oracle最近报警信息,教你怎样用Oracle方便地查看报警日志错误

在网上查了几天的资料,尝试综合清除告警日志内容及建外部表的方式来解决这一问题。一:备份并清除告警日志内容将每天的告警日志备份好,然后进行清除。1:备份报警日志在$ORACLE_HOME/SID/bdump/ 目录下,按日期备份alert_ORACLE_你…

计算机分php,计算机按照处理数据的形态分类,可以分为什么?

计算机按照处理数据的形态分类,可以分为:1、数字计算机,是以数字形式的量值在机器内部进行运算和存储的电子计算机;2、模拟计算机,是根据相似原理,用一种连续变化的模拟量作为被运算的对象的计算机&#xf…

2.oracle物理结构,oracle实验2oracle物理结构管理

oracle实验2oracle物理结构管理 (6页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9 积分实验2 oracle物理存储结构管理、实验目的1. 掌握物理结构的创建和修改方法2. 掌握表空间的存储参数设置方…

linux mount 查看挂载目录,Linux下使用mount来挂载设备到目录

一般情况下直接mount 设备路径 目录路径,就可以了。umount 设备名,就可以卸载这个设备了使用lsblk -f可以查看挂载的设备,以及这些设备的文件系统。roottao-PC:/boot# lsblk -fNAME FSTYPE LABEL UUID MOUNTPOINTsda├─sda1├─sda2 vfat SY…

centos7是哪种版本Linux,centos7怎么查看系统版本是不是7.2 7.5 7.6

CentOS的版本号信息一般存放在配置文件当中,在CentOS中,与其版本相关的配置文件中都有centos关键字,该文件一般存放在/etc/目录下,所以说我们可以直接在该文件夹下搜索相关的文件。其中存放其版本配置信息的文件为“centos-releas…

linux6.0 安装教程,CentOS 6.0安装步骤

1.安装引导选择安装或升级现有系统(Install or upgrade an existing system):这个选项是默认的。 选择此选项,安装到您的计算机使用CentOS的图形安装程序的系统。2.检测光盘介质可以选择skip跳过3.选择安装过程中的语言这里选择chinese中文简…

LeetCode - Easy - 14. Longest Common Prefix

Topic String Description https://leetcode.com/problems/longest-common-prefix/ Write a function to find the longest common prefix string amongst an array of strings. If there is no common prefix, return an empty string “”. Example 1: Input: strs […

linux 虚函数调用性能,C++对象布局及多态实现探索之虚函数调用

我们再看看虚成员函数的调用。类C041中含有虚成员函数,它的定义如下:struct C041{C041() : c_(0x01) {}virtual void foo() { c_ 0x02; }char c_;};执行如下代码:C041 obj;PRINT_DETAIL(C041, obj)PRINT_VTABLE_ITEM(obj, 0, 0)obj.foo();C0…

netflow流量分析工具 linux,Centos5/Linux安装Nfdump和Nfsen图形界面分析netflow数据

Nfdump是linux下netflow数据采集分析工具,Nfsen是基于nfdump是web界面工具,服务器需先安装web服务器和php环境。安装rrdtool及所需组件:yum install perl-rrdtool rrdtool rrdtool-devel rrdutils flex byacc安装所需perl模块:yum…

linux嵌入式平台测试,protobuf-c 在arm linux 嵌入式平台的使用 测试

关于什么是protobuf,网上搜搜一大堆,很多人用的都还是json,以为json是多种语言传输数据是万能的,看完了protobuf的实现,就明白了简单高效才是王道。1、首先写一个.proto扩展名的文件json.proto,内容格式如下…

Linux gitpush错误,linux – GIT:无法推送(奇怪的配置问题)

我正在全新安装Linux Mint.尝试从任何存储库推送时,我收到以下错误:error: Malformed value for push.default: simpleerror: Must be one of nothing,matching,tracking or current.fatal: bad config file line 8 in /home/leng/.gitconfigfatal: Could not read …

linux+shell+func,Linux shell编程笔记总结

Linux Shell学习笔记简介Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内…

linux版车机安装步骤,RedHat Linux 9.0的安装(详细图解安装过程)

RedHat Linux版本:" b, t) b) b# }, t# z- fC& S$ x0 }) GRedHat Linux是目前世界上使用最多的Linux操作系统。因为它具备最好的图形界面,无论是安装、配置还是使用都十分方便,而且运行稳定,因此不论是新手还是老玩家都对它有很高的…