Не работает XMLHttpRequest.upload.onprogress при POST запосах
Привет всем! Хочу прикрутить "прогресс бар" на загрузку файлов, но он не работает при POST запросах. Подскажите почему такое может быть?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method='POST' name="upload" enctype="multipart/form-data"> <input type="file" name="myfile"> <input type="submit" value="Загрузить"> </form> <div id="log">Прогресс загрузки</div><br> <script> function log(html) { document.getElementById('log').innerHTML = html; } document.forms.upload.onsubmit = function() { var file = this.elements.myfile.files[0]; if (file) { upload(file); } return false; } function upload(file) { var xhr = new XMLHttpRequest(); // обработчики можно объединить в один, // если status == 200, то это успех, иначе ошибка xhr.onload = xhr.onerror = function() { if (this.status == 200) { log("success"); } else { log("error " + this.status); } }; // обработчик для закачки xhr.upload.onloadend = function () { document.getElementById('showany').innerHTML = "Загружено" } xhr.upload.onprogress = function(event) { log(event.loaded + ' / ' + event.total); } var formData = new FormData(Document.forms.upload); xhr.send(formData); } </script> </body> </html> |
Вложений: 1
Пробовал и так. Почему тогда GET запросы показывает? Файлы закачиваются, кстати, без проблем.
|
Ага, понял, спасибо. Исправил, но в целом не помогло. По прежнему, видимо, перегружается вся страница.
|
Убирал за "ненадобностью", с ним все также было. Спасибо.
Попробовал вот так, сработало: var formData = new FormData(); formData.append("myfile", file); xhr.open("POST", "", true); xhr.send(formData); Интересно почему так: new FormData(document.forms.upload);не хотел? |
Нет, не так, охватываю больший объем, чем следует, иногда игнорируя детальное рассмотрение частей, тем самым делая ошибки. Хотя можно и проще сказать, начал "шаманить".
Вопрос был по классу объекта и принимаемым экземплярам в конструкторе. Ладно, сам разберусь, и на том спасибо. |
Нет я могу конечно прокомментировать длину моей шаманской логической цепочки. ))
К примеру xhr.open("POST", "", true);была убрана, не просто так, а по наводке. Но это не важно. Поскольку пример приведенный выше, был первым способом, до изменения регистров и удалением строк. И он так и не работает. Что бы было понятно: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method='POST' name="upload" enctype="multipart/form-data"> <input type="file" name="myfile"> <input type="submit" value="Загрузить"> </form> <div id="log">Прогресс загрузки</div><br> <div id="showany"></div> <script> function log(html) { document.getElementById('log').innerHTML = html; } document.forms.upload.onsubmit = function() { var file = this.elements.myfile.files[0]; document.getElementById('showany').innerHTML = file.name if (file) { upload(file); } return false; } function upload(file) { var xhr = new XMLHttpRequest(); // обработчики можно объединить в один, // если status == 200, то это успех, иначе ошибка xhr.onload = xhr.onerror = function() { if (this.status == 200) { log("success"); } else { log("error " + this.status); } }; /*xhr.upload.addEventListener("progress", function (evt) { if (evt.lengthComputable) { log(evt.loaded + ' / ' + evt.total) } }, false);*/ // обработчик для закачки xhr.upload.onloadend = function () { document.getElementById('showany').innerHTML = "Загружено" } xhr.upload.onprogress = function(event) { log(event.loaded + ' / ' + event.total); } var formData = new FormData() //new FormData(document.forms.upload); formData.append("myfile", file); xhr.open("POST", "", true); xhr.send(formData); /*Вариант загрузки/прогресс бара $(document).on('change', '#shot-upload-data', function(e){ var xhr = new XMLHttpRequest(), data = new FormData($('#shot-upload-form')[0]); xhr.upload.addEventListener("progress", function (evt) { if (evt.lengthComputable) { var progress = Math.round(evt.loaded * 100 / evt.total); $('#noTrespassingOuterBarG').css({width:progress + '%'}) #это прогрессбар у меня такой } }, false); xhr.open("POST", "/some/path/"); xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken')); xhr.send(data); }); */ } </script> </body> </html> А вообще, спасибо большое за информацию. Я только взялся за JS, синтаксис по java интуитивно понимаю, но по объектам я почти ноль. |
Вру, работает, сервер запущен не был. :)
А до этого было много разбирательств с бэкендом, видимо одно на другое наложилось. |
Часовой пояс GMT +3, время: 22:49. |