AJAX 請求佇列實現

2021-07-22 23:59:25 字數 1638 閱讀 5729

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)

}//執行佇列裡的順序第乙個的請求

function

exerequestarray()}

//run ajax (string urladdress,bool isasy,string method,string parameters,string whichrequest)

function

dorequest

(url,isasy,method,parstr,callbackfun)

}else

if (window.activexobject) //compatible ie

catch (e)

catch (e){}}

}//if reqobj is false,then alert warnning

if (!reqobj)

reqobj.onreadystatechange = function

(); //set onreadystatechange function

reqobj.open(method, url, isasy); //set open function

reqobj.send(parstr); //do send and send parameters

}//get service response information function

function

getrequest

(callbackfun)

else

requestarray.shift(); //移除佇列裡的順序第乙個的請求,即當前已經執行完成的請求

exerequestarray(); //要求執行佇列中的請求

}}

PHP實現AJAX請求

require util dbutil.php 定義乙個最終用於返回的陣列 該陣列為關聯陣列 resultarr array sql select from dept result mysqli query conn,sql if result num rows 0 設定查詢訊息 resultarr...

AJAX 實現post請求

server.js 引入rexpress const express require express 2.建立應用物件 express 3.建立路由規則 request 是對請求報文的封裝 response 是對響應報文的封裝 get server request,response post ser...

原生js實現Ajax請求

原生的ajax請求離不開xhr物件,即xmlhttprequest物件。所有現代瀏覽器都內建有這個物件。建立整個物件 var xhr new xmlhttprequest 這裡有個版本的差異,ie5和ie6使用activex物件。不同的瀏覽器使用不同的物件。if window.xmlhttprequ...