使用数组的递归JavaScript函数不起作用

时间:2011-10-09 05:06:19

标签: jquery arrays recursion

我尝试使用jQuery和ajax创建一个递归函数来删除文件,以显示进程的状态。问题是,第一次执行该函数(索引0)一切正常,"输出"是" 1594.jpg"。但是当索引增加到1时,它是链文件的第二个特征,删除,' 5',然后' 9'等等。

filesToDelete = new Array();
filesToDelete = '1594.jpg,my.png,test.ogg,Song.mp3,Apple_4S.mov,An App.exe';
filesToDelete = filesToDelete.split(',');

function ajaxDelete(itemList, cpt) {
    var tempItemList = itemList;

    //If cpt is not initialized, initialize it, make sure it's an integer
    if(isNaN(cpt)) cpt = 0*1;

    //If cpt is equal to the array, exit
    if(cpt >= itemList.length) return;

    //Current index
    var curIndex = cpt;
    //The value of the current index
    var current = itemList[curIndex];
    //DEBUG
    console.log('cpt:'+cpt+' index:'+curIndex+'  Value:'+itemList[curIndex]);

    $.ajax({
        url: "deleteFile.php?id="+current,
        beforeSend: function(){
            progressText('Suppression de '+current);
        },
        success: function(data){
            progressText('Suppression...');
            //Index + 1
            cpt++;
            //RECURTION
            setTimeout("ajaxDelete('"+itemList+"', "+cpt+")",1);
        }
    });
}

欢迎任何帮助,如有可能请加以解释..

谢谢!

3 个答案:

答案 0 :(得分:1)

如果由于某种原因你的卡住失败,请不要依赖ajax成功方法。

您应该对每个文件执行ajax调用以删除或更好地将文件数组发送到服务器并让它来处理它。

for (i = 0; i <= filesToDelete.length; i++)
{
    // Ajax Call
    $.ajax({

    });
}

答案 1 :(得分:1)

您将itemList作为字符串传递,但相信它是一个数组。 (在setTimeout电话中,我的意思是。)

但我同意评论/回答; EW!

答案 2 :(得分:1)

您的setTimeout调用正在执行字符串命令:

setTimeout("ajaxDelete('"+itemList+"', "+cpt+")",1);

当您连接字符串和对象时,它会在该对象上获取toString()的值。在数组的情况下,这将给你这个:

ajaxDelete('1594.jpg,my.png,test.ogg,Song.mp3,Apple_4S.mov,An App.exe', 1)

字符串将接受括号并为您提供该字符。这将给你'5'

'1594.jpg,my.png,test.ogg,Song.mp3,Apple_4S.mov,An App.exe'[1]

您可以省略该参数并直接在通话中使用filesToDelete ...