这是第一个得到一个文件列表,每个文件的功能,它会调用一个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