AngularJS http eventHandlers против uploadEventHandlers

javascript angularjs http event-handling

2063 просмотра

1 ответ

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

Я пытаюсь отслеживать прогресс по запросу после публикации, и я получаю прогресс только от uploadEventHandlers , но не от eventHandlers (см. Код ниже). Прогресс, который я получаю от uploadEventHandlers, содержит переданную длину и общую длину, и это здорово. Однако у меня есть следующие вопросы:

  1. Для чего используется eventHandlers ?
  2. Скажем, после загрузки всех данных сервер должен выполнить трудоемкие операции с этими данными (передача по сети, распаковка файлов) перед возвратом ответа HTTP. Есть ли способ, которым сервер может указывать клиенту о прогрессе (помимо регистрации базы данных и опроса клиентом)?

$http({
    url: baseUrlService.baseURL + 'importtifile',
    method: 'POST',
    data: myData

    eventHandlers: {
        progress: function(e) {
            console.log(e);
        }
    },

    uploadEventHandlers: {
        progress: function(e) {
            console.log(e);
        }
    }
}).then(
...
Автор: jazzblue Источник Размещён: 18.07.2016 07:02

Ответы (1)


3 плюса

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

  1. EventHandler используется для подключения и обработки других событий. Используйте только uploadEventHandlers для отслеживания хода загрузки файла.
  2. Вы можете использовать eventHandlers -> readystatechange, чтобы отслеживать состояние соединения. Итак, когда readyState равен 4, вы знаете, что сервер закрыл соединение.

Примечание. Вы можете сообщить пользователю, что сервер выполнит дополнительную работу после того, как загрузка файлов достигнет 100%.

Это ваш модифицированный код:

$http({
    url: baseUrlService.baseURL + 'importtifile',
    method: 'POST',
    data: myData

    eventHandlers: {
        readystatechange: function(event) {
                        if(event.currentTarget.readyState === 4) {
                            console.log("readyState=4: Server has finished extra work!");
                        }
                    }
    },

    uploadEventHandlers: {
        progress: function(e) {
             if (e.lengthComputable) {
                progress = Math.round(e.loaded * 100 / e.total);
                console.log("progress: " + progress + "%");
                if (e.loaded == e.total) {
                  console.log("File upload finished!");
                  console.log("Server will perform extra work now...");
                }
            }
        }
    }
}).then(
...

Автор: Alejandro Lasebnik Размещён: 25.09.2016 10:47
Вопросы из категории :
32x32