Valums Ajax Uploader (Mutli) - обнаружение при загрузке всех файлов
Я использую Valums Ajax Uploader для загрузки партии файлов. Недавно мы изменили код из одного загружаемого файла с несколькими загрузками. Это вызвало проблему с нашим кодом.
Как вы можете видеть, при пожаре событий onComplete
мы перезагружаем страницу, чтобы отображать недавно загруженные изображения. Тем не менее, событие onComplete
, похоже, срабатывает после завершения файла EACH, а не после всей партии. Это теперь вызывает проблему, потому что когда первый файл заканчивается, попытка перезагрузки страницы запускается, и загрузчик выдает предупреждение "Если вы покинете эту страницу, все черты будут разрываться на оставшихся загрузках" - или что-то в этом роде.
Я замечаю, что событие onComplete
отправляет обратно 0-основанный идентификатор завершенного файла, но я точно не знаю, как его использовать, чтобы определить, когда пакет сделан.
Я думаю, мой вопрос: 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;
}
})
Ответы
Ответ 1
Вы можете добавить счетчик, который увеличивается при запуске загрузки и уменьшается после завершения. Только переадресация завершена, когда счетчик равен 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
Хороший ответ, из интереса, если вы хотите проверить responseJSON, чтобы узнать, загружены ли файлы, его набор на сервере script
return array('success'=>true, 'filename'=>$filename . '.' . $ext);
Затем вы можете забрать его в JS, например
var success = responseJSON["success"]
var filename = responseJSON["filename"]
Таким образом, вы можете составить список файлов и проверить имена при завершении или только уменьшить
if (success == true)
Если загрузка была неудачной, вы можете не захотеть ее уменьшить, например
Ответ 3
Вам нужно добавить событие отмены, если пользователь отменит загрузку файла:
onCancel: function(id, fileName){running--;}
Я обсуждаю правильный подход к моей реализации. Я также хотел бы, чтобы страница была перенаправлена после загрузки файлов, но что, если пользователь намеревается загрузить больше файлов; файлы могут быть распространены в отдельных каталогах.
Похоже, лучший подход - это иметь кнопку "Я сделал", которая будет перенаправлена после завершения загрузки пользователя.
Ответ 4
Простейшим способом было бы использовать внутреннее свойство _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;
}
}
});