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...