рассчитать загруженные данные на сервер с помощью сценария Java - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь загрузить большой размер данных (не файлов) на сервер с помощью Ajax (XMLHttpRequest). Мне нужно рассчитать загруженные данные на сервер.Я использую код ниже:

var formData = new FormData();
var xhr = new XMLHttpRequest();

formData.append('supplierListing', JSON.stringify(excelPostData));

formData.append('jobName', document.getElementById('jobNameInput').value);

formData.append('additionalHeader', addHeader);

xhr.open('post', '/primeChoice/sheet', true);

xhr.onprogress = function (e) {
  clearInterval (counterInt);
  document.getElementById ('uploadCounter').innerHTML = Math.floor((e.loaded / e.total) * 100) + '%';
}

xhr.onloadstart = function (e) {
  document.getElementById ('uploadCounter').innerHTML = '0%';
}  

xhr.onreadystatechange = function (aEvt) {
  if (xhr.readyState === 4) {
    if(xhr.status === 200) {
      document.getElementById("progressBar").style.display = "none";
      document.getElementById("uploadSheetStatus").style.display = "block";
      setTimeout(function() {
        location.reload();
      },3000);
    }
  }
}

xhr.onerror = function(e) {
  showInfo('An error occurred while submitting the form.');
};  

xhr.onload = function() {
  showInfo(this.statusText);
};

xhr.send(formData);

, когда я выполняю этот код, я получаю ответ только 0%, 85%, 100%.в то время как это должно быть похоже на увеличение прогрессирующего числа, такого как 0%, 1%, 2%, ...., 100%.

означает, что в течение длительного времени вызов выполнения не перенаправляет из события "onloadstart" в«onprogress» события, и он показывает «0%» прогресс в течение длительного времени.но когда компилятор достигает состояния / события onprogress, он показывает только 2 ответа как 85% и 100%.

Как я могу улучшить этот процесс, чтобы я мог получить размер загруженных данных в режиме реального времени?

1 Ответ

0 голосов
/ 04 декабря 2018

Я упорно трудился, чтобы решить эту проблему.Вы не можете решить эту проблему только через Javascript.Вы должны использовать программирование сокетов.это поможет отобразить результат во время выполнения.позвольте мне объяснить мой ответ, node.js

const express = require('express');
let server =  app.listen(app.get('port'), () => {
  console.log('%s App is running at http://localhost:%d in %s mode', chalk.green('✓'), app.get('port'), app.get('env'));
});

var io = require('socket.io').listen(server);
io.sockets.on('connection', function (socket) {
  socket.send('Sent a message 4seconds after connection!');    
  console.log(' %s sockets connected', io.engine.clientsCount);    
  socket.on('disconnect', function() {
      console.log("disconnect: ", socket.id);
  });
});

app.set('socketio', io);

в моем контроллере,

var io = req.app.get('socketio');
connection.query('INSERT INTO [MY TABLE NAME] SET ?', row, function (error, results, fields) {
            if (error)
                throw error;

            let percentage =  parseInt (Math.ceil ((i/sheetData.length)*100));
            io.sockets.emit('progressBar',{ progressPercentage: (percentage > 100) ? 100 : percentage, user: row.user});
        });

В нефрите / просмотре,

var socket = io();

socket.on('connect', function () {
  socket.on('message',function(data) {
    console.log (data);
  });
  socket.on('progressBar',function(data) {
    document.getElementById ('uploadCounter').innerHTML = null;
    document.getElementById ('uploadCounter').innerHTML = data.progressPercentage + '%';
  });
});

Я верю, что этот подход будетпоможет вам показать прогресс загрузки во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...