这是一个首先获取文件列表的函数,对于每个文件,它将调用ajax函数来执行某些操作:
function getImagesList(folder) {
$.ajax({
type:"POST",
url: "getImgList.php",
data: {"data":folder},
dataType: "json",
success: function (data) {
var IsfirstLoggingItem = "true";
for (var key in data) {
//alert (data[key]);
pdfToImgExec (data[key],IsfirstLoggingItem,folder,1);
$('#pdfToImgResult').append('<p>Processing ' + data[key] + ' <img src="loading.gif" height="20" width="20"/></p>');
IsfirstLoggingItem = "false";
}
folder == 'Incoming' ? getImagesList('result') : pdfToImgResult();
},
error: function(x, t, m) {
$('#pdfToImgResult').html('<p>Error</p>');
alert (t);
releaseBtn();
}
});
}
这是被调用函数,它包含一个执行某事的ajax函数
function pdfToImgExec(file,IsfirstLogging,folder,round){
var postString = file + '&' + IsfirstLogging + '&' + folder;
$.ajax({
type: "POST",
url: "pdfToImgExec.php",
data: {"data":postString},
dataType: "html",
success: function (data) {
if (data) {
$('#pdfToImgResult').html('').append('<p>Finish processing ' + file + '</p>');
} else if (!data && round < 4) {
$('#pdfToImgResult').html('').append('<p>Encounter error in processing ' + file + ' , retrying ' + round + ' round </p>');
round++;
pdfToImgExec(file,IsfirstLogging,folder,round);
}
},
error: function(x, t, m) {
$('#pdfToImgResult').html('errpr');
alert (t);
releaseBtn();
}
});
}
简而言之,getImagesList函数获取一个文件列表,对于每个文件,调用pdfToImgExec函数来做一些ajax工作人员。问题是,它不会等待ajax工作人员完成但是开始下一个循环。
这意味着,我想,例如file1运行ajax staff =&gt; file1完成ajax staff =&gt; file2运行ajax staff =&gt; file2 finish =&gt;检查结果
但是,目前的情况是file1运行ajax staff =&gt; file2运行ajax staff =&gt; check result =&gt; file1 finish / file2完成
我在两个函数中都尝试过async:false,cache:false但它似乎没有帮助,如何修复它?感谢
答案 0 :(得分:1)
使用数组存储数据
var dataArr=[];
在第一个函数中,将数据推送到数组
function getImagesList(folder) {
$.ajax({
type:"POST",
url: "getImgList.php",
data: {"data":folder},
dataType: "json",
success: function (data) {
dataArr = data;
doProcessData();
},
error: function(x, t, m) {
$('#pdfToImgResult').html('<p>Error</p>');
alert (t);
releaseBtn();
}
});
}
功能doProcessData
像这样:
function doProcessData(itemDoneCallback, allDoneCallback) {
if(typeof(itemDoneCallback)==undefined)itemDoneCallback=function(){};
if(typeof(allDoneCallback)==undefined)allDoneCallback=function(){};
if(arrData.length>0){
var key = arrData[0];
$.ajax({
//option here like your function pdfToImgExec
success: function (data) {
arrData.splice(0,1);//remove first data.
doProcessData();// call to process next data.
itemDoneCallback(); // callback to process some thing
}
})
}else{
allDoneCallback();// all done callback
}
}
希望这有帮助!