日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

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

發布時間:2023/12/13 php 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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(); //要求執行隊列中的請求

}

}

上面是我整理給大家的,希望今后會對大家有幫助。

相關文章:

總結

以上是生活随笔為你收集整理的php ajax队列,AJAX请求队列实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。