Вопрос:

Как узнать, когда загрузка ajax-файла полностью завершена, перед длительной обработкой файла на стороне сервера

php jquery ajax file-upload

91 просмотра

1 ответ

1695 Репутация автора

Я загружаю файл, используя JQuery, ajax и FormData, с PHP на стороне сервера. Загрузка файла работает, и у меня есть индикатор выполнения, который успешно обновляется во время загрузки. Тем не менее, когда файлы небольшие или сетевое соединение быстрое, последнее полученное событие прогресса может быть не на уровне 100% (оно может быть меньше 90%). Это проблема, поскольку я хочу изменить текст индикатора выполнения после передачи файла, чтобы указать, что происходит обработка на стороне сервера (преобразование PDF в изображения, что может занять некоторое время).

Есть ли какой-нибудь способ узнать, когда передача файла завершена, чтобы я мог убедиться, что индикатор выполнения не застрял на анонимном / вызывающем нетерпение / о-о-о-о-о-о-остановил-работает-лучше-обновить-и- повторить 89% для всей продолжительности обработки на стороне сервера?

Мой код загрузки в случае , если это отношение (я удалил beforeSend, successи completeдля краткости):

var formData = new FormData($('#form-file-upload')[0]);
$.ajax({
  url: 'ajax/file-upload.php',
  type: 'POST',
  dataType : "json",
  xhr: function() {
    var myXhr = $.ajaxSettings.xhr();
    if(myXhr.upload){
      myXhr.upload.addEventListener('progress', function(e){
        if(e.lengthComputable){
          var percent = (100*e.loaded/e.total).toFixed(0);
          $('#form-file-upload-progress-percent').html(percent + ' %');
          $('#form-file-upload-progress-bar').attr('aria-valuenow', percent).css({width: percent + '%'});
        }
      }, false);
    }
    return myXhr;
  },
  beforeSend: // code executed before submission
  success: // code executed after successful server-side processing
  complete: // code executed after server-side processing
  data: formData,
  cache: false,
  contentType: false,
  processData: false
});
Автор: cmeeren Источник Размещён: 26.07.2015 03:18

Ответы (1)


0 плюса

988 Репутация автора

uploadимеет те же события, что и основной xhr. Так myXhr.upload.addEventListener("load", uploadComplete);это то, что вы ищете.

Автор: adotout Размещён: 12.06.2019 10:09
32x32