2011-01-07 79 views
12

我正在使用Valums Ajax Uploader上傳一批文件。我們最近更改了單上傳多上傳類型的代碼。這引起了我們的代碼的問題。Valums Ajax Uploader(Mutli) - 檢測何時上傳所有文件

正如您所看到的,當onComplete事件觸發時,我們重新加載頁面以顯示新上傳的圖像。但是,onComplete事件似乎在每個文件完成後觸發,而不是在整個批次完成之後觸發。這會造成問題,因爲當第一個文件完成時,頁面重新加載嘗試被觸發,上傳者彈出一條警告「如果你離開這個頁面,所有的問題都會在你剩下的上傳中突然出現」 - 或者是那種情況。

我注意到onComplete事件發回了一個基於0的已完成文件的ID,但我不確定如何使用它來確定批次的完成時間。

我想我的問題是A)是否有一個不同的事件,當所有文件都完成時觸發或B)如何確定用戶選擇了多少個文件,以便跟蹤onComplete事件中有多少個文件已完成?

var uploader = new qq.FileUploader({ 
     multiple: true, 
     element: document.getElementById('file-uploader'), 
     action: '/projectPhotoUpload.php', 
     allowedExtensions: ['jpg', 'png', 'gif'], 
     debug: true, 
     params: {id: i}, 
     onComplete: function(id, fileName, responseJSON){ 
      window.location = 'projects.php?all=true&tab=1&sel=' + currProject;         
     } 
    }) 

回答

22

您可以添加一個計數器,當上傳開始時遞增並在完成時遞減。只有在完成重定向當計數器爲0

var running = 0; 
var uploader = new qq.FileUploader({ 
    multiple: true, 
    element: document.getElementById('file-uploader'), 
    action: '/projectPhotoUpload.php', 
    allowedExtensions: ['jpg', 'png', 'gif'], 
    debug: true, 
    params: {id: i}, 
    onSubmit: function(id, fileName){ 
     running++;         
    }, 
    onComplete: function(id, fileName, responseJSON){ 
     running--; 
     if(running==0){ 
      window.location = 'projects.php?all=true&tab=1&sel=' + currProject;         
     } 
    } 
}) 
+2

完美!正是我在找什麼。 – Dutchie432 2011-01-07 18:28:29

+0

極好的解決方案! – Sadikhasan 2015-01-29 09:34:50

4

很好的回答,出於興趣,如果你想檢查responseJSON,看看是否有文件上傳,其設置在服務器腳本

return array('success'=>true, 'filename'=>$filename . '.' . $ext); 

然後你就可以把它撿起來的JS像

var success = responseJSON["success"] 
var filename = responseJSON["filename"] 

這種方式,您可以使文件列表和檢查完成的名稱,或僅減少

if (success == true) 

如果上傳失敗了,那麼你可能不希望它遞減例如

+0

+1以正確執行嘗試。 – Herr 2011-09-08 12:41:42

1

你需要的情況下,添加一個取消事件的用戶取消了文件上傳:

onCancel: function(id, fileName){running--;} 

我正在討論在我的實施中採取的正確方法。我還希望在文件上傳後重定向頁面,但如果用戶想要上傳更多文件,該怎麼辦?這些文件可能分散在不同的目錄中。

似乎最好的方法是有一個「我已經完成」按鈕,一旦用戶完成上傳就會重定向。

-1

更簡單的方法是使用內部屬性_filesInProgress來檢查是否已處理所有上傳的文件。 它會給:

var uploader = new qq.FileUploader({ 
    multiple: true, 
    element: document.getElementById('file-uploader'), 
    action: '/projectPhotoUpload.php', 
    allowedExtensions: ['jpg', 'png', 'gif'], 
    debug: true, 
    params: {id: i}, 
    onComplete: function(id, fileName, responseJSON){ 
     if(uploader._filesInProgress == 0){ 
      window.location = 'projects.php?all=true&tab=1&sel=' + currProject; 
     }         
    } 
});