ajax异步调用的队列实现,可以解决同步时的阻塞问题。比较简单,直接代码:
//定义队列
var duilie = {};
duilie["arr"] = new Array();
duilie["zhizhen"] = 0;//队列指针
//重置队列
function resetDuilie(){
duilie["arr"] = new Array();
duilie["zhizhen"] = 0;//队列指针
}
//添加到队列中
function addToDuilieForSave(xmlData, faileMsg, delayed, url){
var item = {};
item["xmlData"] = xmlData;
item["faileMsg"] = faileMsg;//保存错误时的提示信息
item["isSuccess"] = false;//成功与否
item["delayed"] = delayed;//执行后延时
item["url"] = url;
duilie["arr"].push(item);
}
//回调函数
function callbackForSave(){
if(duilie["arr"].length == 0 || duilie["zhizhen"] == duilie["arr"].length){//队列执行完毕
finishedHandleForSave();
}else{
var zhizhen = duilie["zhizhen"];
var currentItem = duilie["arr"][zhizhen];
var delayed = currentItem["delayed"];
$.ajax({
url: currentItem["url"],
async : true,
type: "post",
//processData: false,
dataType: "text",
data: currentItem["xmlData"],
//contentType:"application/xml",
success: function (data) {
currentItem["isSuccess"] = true;
duilie["zhizhen"] = zhizhen + 1;
setTimeout(callbackForSave ,delayed);
},
error: function(){
duilie["zhizhen"] = zhizhen + 1;
callbackForSave();
}
});
}
}
//队列执行完毕的处理函数
function finishedHandleForSave(){
var arr = duilie["arr"];
var msg = "";
for(var i = 0; i<arr.length; i++){
if(arr[i]["isSuccess"] == false)
msg += arr[i].faileMsg;
}
alert(msg);
}
如何使用:
$(function(){
addToDuilieForSave("i am a xmlData01", "保存时间字幕错误", 2000, "http://localhost/xmltest/doLogin.php");
addToDuilieForSave("i am a xmlData02", "保存固定字幕错误", 2000, "http://localhost/xmltest/doLodgin.php");
addToDuilieForSave("i am a xmlData03", "保存接口字幕错误", 2000, "http://localhost/xmltest/doLogin.php");
callbackForSave();
});