這是第一個得到一個文件列表,每個文件的功能,它會調用一個AJAX函數來執行的東西:For循環僅在內部函數完成時繼續循環?
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 => file1完成ajax staff => file2運行ajax staff => file2 finish =>檢查結果
但是,目前的情況是file1運行ajax staff => file2運行ajax staff => check result =>文件1光潔度/ FILE2完成
我曾嘗試異步:假,緩存:在這兩個函數假,但它似乎沒有任何幫助,如何解決呢?感謝
你可以設置在'getImgList.php'回調作爲setInterval的基礎功能,將循環當'pdfToImgExec.php'做這件事。這些是相同的後端?爲什麼如果這兩個操作之間存在如此緊密的相關性,後端不會考慮這兩個操作? – gillyspy 2013-05-06 03:24:12
對不起,你的意思是後端可以處理沒有任何php代碼的執行順序? – user782104 2013-05-06 04:11:36
我給你兩個選擇。第一種選擇是通過'setInterval'通過「監視」來控制循環的前端方式。第二個選項......如果你控制後端,那麼我將向一個執行這兩個步驟的後端服務發出一個AJAX請求。 – gillyspy 2013-05-06 14:25:01