2010-04-15 17 views
0

我想寫一個jQuery函數讓用戶一次上傳多個文件。這是我想給用戶一些關於上傳過程進度的反饋的功能。jQuery遞歸函數上傳許多文件,同時給用戶一些反饋

function uploadFiles(numbersOfFiles, start) { 
    $("#info").html(start + " files uploaded"); 
    $.post('upload.php', { 
     start: start 
    }, function (data) { 
     start += 5; 
     if (start < numbersOfFiles) { 
     uploadFiles(numbersOfFiles, start); 
     } else { 
     $("#info").html("All files have been uploaded"); 
     } 
    }); 
} 

該函數調用php腳本上傳5個文件,然後如果有更多文件需要上傳,則再次調用該腳本。整個過程起作用。我已經用100個文件試過了。唯一不起作用的是#info div更新。 div第一次更新,然後再次顯示「所有文件已上傳」。因此,用戶無法瞭解上傳過程。 我無法理解爲什麼...有什麼幫助?

+0

你解決了這個問題嗎? – dejavu 2010-08-05 13:44:09

回答

0

$.post是異步執行的。這意味着jQuery不會等待POST執行完之後再執行另一個$.post

因此,jQuery將很快執行所有POST,並且您只能看到「所有文件已上載」消息,即使實際的POST仍然存在在後臺等待響應。

要做你想做的事情,在complete:遞歸調用uploadFiles

+0

checcco忽略這個答案,不要浪費你的時間在它上面哈哈。我有點困或可能醉了。 – 2010-04-15 10:50:27

+0

$ .post僅接受回調函數才能成功。我應該使用完整的回調函數嗎? – checcco 2010-04-15 11:00:04

+0

正如我所說的......當我回答你的問題時,我要麼是打瞌睡,要麼是醉酒(或兩者兼有)。我發現你的jquery沒有錯,所以我想它一定是你的html標記。你能發佈你的html嗎?你測試過兩個Firefox的IE嗎?在標記中可能會出現一些愚蠢的錯字錯誤。 – 2010-04-15 11:26:26