... потому что они не являются частью опубликованного API и могут измениться в любое время. Разрывные изменения внутренних частных свойств могут быть частыми и недокументированными.

ользую Valums Ajax Uploader для загрузки пакета файлов. Недавно мы изменили код с однократной загрузки на мультизагрузочную. Это вызвало проблему с нашим кодом.

Как вы можете видеть, когдаonComplete Огонь события, мы перезагрузим страницу, чтобы показать недавно загруженные изображения. ОднакоonComplete событие запускается после завершения КАЖДОГО файла, а не после завершения всего пакета. Теперь это вызывает проблему, потому что, когда первый файл заканчивается, попытка перезагрузки страницы запускается, и загрузчик выскакивает предупреждение «Если вы покинете эту страницу, весь хек потерпит неудачу при оставшихся загрузках» - или что-то в этом роде.

Я замечаюonComplete Событие отправляет обратно нулевой идентификатор завершенного файла, но я не уверен, как именно это использовать, чтобы определить, когда пакет завершен.

Я предполагаю, что мой вопрос А) Есть ли другое событие, которое срабатывает, когда все файлы завершены, или Б) Как определить, сколько файлов выбрал пользователь, чтобы отслеживать в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;                                 
        }   
    })  

Ответы на вопрос(4)

из интереса, если вы хотите проверить responseJSON, чтобы увидеть, загружены ли файлы, он установлен в сценарии сервера

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

Тогда вы можете забрать его в JS, как

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

Таким образом, вы можете составить список файлов и проверить имена по завершении или только уменьшить

if (success == true)

Если загрузка не удалась, вы, возможно, не захотите уменьшить ее, например

 Herr08 сент. 2011 г., 14:41
+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;
        }                                 
    }   
});
 Munto02 окт. 2013 г., 18:09
@RayNicholus Почему это?
 Ray Nicholus04 июл. 2013 г., 19:48
Никогда не стоит полагаться на "частные" свойства
 Ray Nicholus02 окт. 2013 г., 18:13
... потому что они не являются частью опубликованного API и могут измениться в любое время. Разрывные изменения внутренних частных свойств могут быть частыми и недокументированными.
Решение Вопроса

который увеличивается при начале загрузки и уменьшается при завершении. Перенаправление на завершено только когда счетчик равен 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;                                 
        }
    }   
}) 
 Dutchie43207 янв. 2011 г., 19:28
ИДЕАЛЬНЫЙ! Именно то, что я искал.
 Sadikhasan29 янв. 2015 г., 10:34
Отличное решение !!!!

если пользователь отменяет загрузку файла:

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

Я обсуждаю правильный подход к реализации. Я также хотел бы перенаправить страницу после загрузки файлов, но что, если пользователь намеревается загрузить больше файлов; файлы могут быть разложены в отдельных каталогах.

Похоже, что лучший подход - это иметь кнопку «I'm Done», которая будет перенаправлять после завершения загрузки пользователем.

Ваш ответ на вопрос