xhr.onprogress
– и есть прогресс загрузки файла на сервер. Файл отправляется в обработчик по роуту /storage/upload/comment, но загружается на сервер он не мгновенно, потому что он имеет некоторый размер. В это время многократно стреляет событие onprogress, именно в этом событии и происходит рисование прелоадера на основании таких свойств как event.loaded и event.total.В это время многократно стреляет событие onprogress, именно в этом событии и происходит рисование прелоадера на основании таких свойств как event.loaded и event.total.
xhr.upload.onprogress = function(event) {
alert( 'Загружено на сервер ' + event.loaded + ' байт из ' + event.total );
}
xhr.onprogress = function(event) {
alert( 'Получено с сервера ' + event.loaded + ' байт из ' + event.total );
}
myXhr.upload.onprogress
, а не на myXhr.onprogress
.myXhr.upload.onprogress = function(e) {
var percentComplete = e.loaded / e.total;
// opacity
el.style.opacity = percentComplete;
// или ширину какую-нибудь:
el.style.width = percentComplete * 100 + '%';
}
100% прелоадер там, как и у вас, будет раньше, чем придёт ответ 200 от сервера
initUploadFile: function(e) {
var t, i, n = this, o = ["doc", "docx", "xls", "xlsx", "pdf", "jpg", "jpeg", "gif", "png", "zip", "rar"], a = $(e), r = !1, s = $('<div id="progress"><div class="progressbar-value"></div></div>'), c = "fancybox-content", d = a.attr("data-file-upload") || "/putdocpub";
a.is("#products-order-form") ? c = "products-edit-window" : a.is("#services-order-form") && (c = "services-edit-window"),
t = a.find(".attach-btn a"),
i = new Nethouse.Uploader(t[0],{
path: d
}),
i.addExtensionFilter(o).addFileSizeFilter(20 * Nethouse.Uploader.MB).on("before", function(e) {
e.length && (Notifier.showIndicator(c),
s.hide(),
r || (r = !0,
t.after(s)),
t.hide())
}
.bind(this)).on("progress", function(e) {
s.show(),
s.find(".progressbar-value").css({
width: e.loaded / e.total * 100 + "%"
})
}).on("filecomplete", function(e, i, o) {
if (Notifier.hideIndicator(c),
s.hide(),
t.show(),
e)
return void ntNotification.showError(sprintf(window.view.translate("js_uploader_upload_file_fail"), o.name), 6e3);
var r, d, l, u, m, p, h, f = window.JSON.parse(i.response);
f.success && f.url || ntNotification.showError(sprintf(window.view.translate("js_uploader_upload_file_fail"), o.name), 6e3),
r = f.url,
d = f.name,
l = f.size,
u = f.timestamp,
a.find("#attach-url").val(r),
a.find("#attach-name").val(d),
a.find("#attach-size").val(l),
a.find("#attach-timestamp").val(u),
m = a.find(".attach-info .file-info"),
m.find(".attach-file-name").html(d),
p = n.getHumanReadableFileSize(l),
m.find(".attach-file-size").html(p),
m.parent().show(),
a.find(".attach-btn").hide(),
(h = n.getFileIcon(d)) && a.find(".file-icons").addClass(h)
}).on("error", function(e, i) {
s.hide(),
t.show();
var n = Nethouse.Uploader.Errors;
switch (e) {
case n.EXTENSION:
ntNotification.showError(sprintf(view.translate("js_uploader_extension_fail"), i.file.name, o.join(", ")), 6e3);
break;
case n.MAX_SIZE:
ntNotification.showError(sprintf(view.translate("js_uploader_max_size_fail"), i.file.name, "20 MB"), 6e3)
}
}
.bind(this))
}
<div class="upload-image__progress" style="top: 100%;"></div>