我尝试使用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);
}
});
}
欢迎任何帮助,如有可能请加以解释..
谢谢!
答案 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 ...