AngularJS http eventHandlers vs uploadEventHandlers

时间:2016-07-18 19:02:16

标签: javascript angularjs http event-handling

我正在尝试跟踪帖子请求的进度,我只是从 uploadEventHandlers 获得了进展,但没有从 eventHandlers 获得进展(请参阅下面的代码)。我从 uploadEventHandlers 获得的进度包含传输的长度和总长度。但是我有这些问题:

  1. 什么是 eventHandlers 用于?
  2. 让我们说,在上传所有数据后,服务器必须执行时间 消费对该数据的操作(网络传输,文件 在返回HTTP响应之前解压缩。有什么办法吗? 服务器可以向客户端指示进度(除此之外) 记录DB并由客户端轮询?
  3. $http({
        url: baseUrlService.baseURL + 'importtifile',
        method: 'POST',
        data: myData
    
        eventHandlers: {
            progress: function(e) {
                console.log(e);
            }
        },
    
        uploadEventHandlers: {
            progress: function(e) {
                console.log(e);
            }
        }
    }).then(
    ...
    

1 个答案:

答案 0 :(得分:2)

  1. eventHandler用于附加和处理其他事件。仅使用uploadEventHandlers来跟踪上传文件的进度。
  2. 您可以使用eventHandlers - > readystatechange,用于跟踪连接状态。因此,当readyState等于4时,您知道服务器已关闭连接。
  3. 注意:您可以通知用户,在上传文件达到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(
    ...