0

这是一个首先获取文件列表的函数,对于每个文件,它将调用一个 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 员工 => file1 完成 ajax 员工 => file2 运行 ajax 员工 => file2 完成 => 检查结果

但是,目前的情况是file1运行ajax人员=>file2运行ajax人员=>检查结果=>file1完成/file2完成

我在这两个函数中都尝试过 async:false, cache :false 但似乎没有帮助,如何解决?谢谢

4

1 回答 1

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

希望这有帮助!

于 2013-05-06T02:52:19.077 回答