Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.10.2016, 16:33
Новичок на форуме
Отправить личное сообщение для Serduko Посмотреть профиль Найти все сообщения от Serduko
 
Регистрация: 04.10.2016
Сообщений: 7

Не работает 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>
Ответить с цитированием
  #2 (permalink)  
Старый 05.10.2016, 08:52
Новичок на форуме
Отправить личное сообщение для Serduko Посмотреть профиль Найти все сообщения от Serduko
 
Регистрация: 04.10.2016
Сообщений: 7

Пробовал и так. Почему тогда GET запросы показывает? Файлы закачиваются, кстати, без проблем.
Изображения:
Тип файла: png Безымянный.png (3.0 Кб, 3 просмотров)
Ответить с цитированием
  #3 (permalink)  
Старый 05.10.2016, 10:13
Новичок на форуме
Отправить личное сообщение для Serduko Посмотреть профиль Найти все сообщения от Serduko
 
Регистрация: 04.10.2016
Сообщений: 7

Ага, понял, спасибо. Исправил, но в целом не помогло. По прежнему, видимо, перегружается вся страница.
Ответить с цитированием
  #4 (permalink)  
Старый 05.10.2016, 10:57
Новичок на форуме
Отправить личное сообщение для Serduko Посмотреть профиль Найти все сообщения от Serduko
 
Регистрация: 04.10.2016
Сообщений: 7

Убирал за "ненадобностью", с ним все также было. Спасибо.

Попробовал вот так, сработало:
var formData = new FormData();
formData.append("myfile", file);
xhr.open("POST", "", true);
xhr.send(formData);


Интересно почему так:
new FormData(document.forms.upload);
не хотел?
Ответить с цитированием
  #5 (permalink)  
Старый 05.10.2016, 11:32
Новичок на форуме
Отправить личное сообщение для Serduko Посмотреть профиль Найти все сообщения от Serduko
 
Регистрация: 04.10.2016
Сообщений: 7

Нет, не так, охватываю больший объем, чем следует, иногда игнорируя детальное рассмотрение частей, тем самым делая ошибки. Хотя можно и проще сказать, начал "шаманить".
Вопрос был по классу объекта и принимаемым экземплярам в конструкторе. Ладно, сам разберусь, и на том спасибо.

Последний раз редактировалось Serduko, 05.10.2016 в 11:36.
Ответить с цитированием
  #6 (permalink)  
Старый 05.10.2016, 12:50
Новичок на форуме
Отправить личное сообщение для Serduko Посмотреть профиль Найти все сообщения от Serduko
 
Регистрация: 04.10.2016
Сообщений: 7

Нет я могу конечно прокомментировать длину моей шаманской логической цепочки. ))

К примеру
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 интуитивно понимаю, но по объектам я почти ноль.

Последний раз редактировалось Serduko, 05.10.2016 в 13:02.
Ответить с цитированием
  #7 (permalink)  
Старый 05.10.2016, 13:14
Новичок на форуме
Отправить личное сообщение для Serduko Посмотреть профиль Найти все сообщения от Serduko
 
Регистрация: 04.10.2016
Сообщений: 7

Вру, работает, сервер запущен не был.

А до этого было много разбирательств с бэкендом, видимо одно на другое наложилось.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax при заходе на страницу из поисковика - не работает Алексей_ГР Ваши сайты и скрипты 2 03.09.2013 00:03
Не работает Javascript при заданном doctype sasha-ua Общие вопросы Javascript 6 22.07.2013 12:00
обработка строки при ajax (post) запросе virus-07 AJAX и COMET 2 17.07.2013 13:55
Не работает onchange при повторной загрузке файла kuzya_vl Элементы интерфейса 4 17.02.2013 10:26
При отправке POST-запроса в заголовке к серверу вместо POST указывается OPTIONS VasiliyLuka AJAX и COMET 1 14.12.2009 14:57