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.pswp.cn/news/445759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445759.shtml
英文地址,請注明出處:http://en.pswp.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操作系統。因為它具備最好的圖形界面,無論是安裝、配置還是使用都十分方便,而且運行穩定,因此不論是新手還是老玩家都對它有很高的…