0

How do I correctly add a loading indicator when loading via API? When you click on the button, the event does not count as the file upload via php. Outputs the NaN value. I would like it to calculate the percentages correctly. I don’t know where to insert e. Loadd so that it counts.

js

  <script>
    let form = document.getElementById('appForm');
    let messageBox = document.getElementById('message');
    let fileInputLabel = document.getElementById('file_input_label');
    let fileInput = document.getElementById('file_input');
    let submitButton = document.getElementById('upload_modsfire');
    let urlBox = document.getElementById('xf_download1');
    let sizeBox = document.getElementById('xf_sizefile');

    let progressWrapper = document.getElementById('progress_wrapper');
    let progressBar = document.getElementById('progress_upload');
    let progressStatus = document.getElementById('progress_status');

    function inputFilename() {
        fileInputLabel.innerText = fileInput.files[0].name;
    }

    submitButton.addEventListener('click', function (e) {
        e.preventDefault()
        let formData = new FormData(form);
        submitButton.innerHTML = 'Please wait <i class="fad fa-spinner-third fa-spin"></i>'

        **let loaded = e.loaded;
        let total = e.total;
        let percent_stage = (loaded / total) * 100;**

        progressWrapper.classList.remove('d-none')
        progressBar.setAttribute("style", `width: ${Math.floor(percent_stage)}%`);
        progressStatus.innerText = `${Math.floor(percent_stage)} загружено`

        fetch('https://modeland.ru/engine/modsfire/form.php', {
            method: 'POST',
            body: formData,
        }).then(response => response.json())
            .then(data => {
                if(data.status) {
                    console.log(data)
                    submitButton.innerText = `Файл успешно загружен`;
                    submitButton.classList.replace('btn-outline-primary', 'btn-outline-success')
                    messageBox.innerHTML = `<div class="alert alert-primary mt-2 mb-1 alert-dismissible fade show" role="alert">
                                                ${data.message}
                                                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                                  <span aria-hidden="true">&times;</span>
                                                </button>
                                              </div>`;
                    urlBox.setAttribute('value', data.url);
                    sizeBox.setAttribute('value', data.size);
                }
                else {
                    submitButton.classList.replace('btn-outline-primary', 'btn-outline-danger')
                    submitButton.innerText = 'Загрузка прервана. Повторите...'
                    messageBox.innerHTML = `<div class="alert alert-danger mt-2 mb-1 alert-dismissible fade show" role="alert">
                                                ${data.message}
                                                <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                                  <span aria-hidden="true">&times;</span>
                                                </button>
                                              </div>`;
                }
            })
    })
</script>
  • There is an answer on this post https://stackoverflow.com/questions/35711724/upload-progress-indicators-for-fetch – farvilain Nov 28 '20 at 09:33
  • Does this answer your question? [How do I correctly clone a JavaScript object?](https://stackoverflow.com/questions/728360/how-do-i-correctly-clone-a-javascript-object) – zeytin Nov 29 '20 at 01:15
  • 1
    Does this answer your question? [Upload progress indicators for fetch?](https://stackoverflow.com/questions/35711724/upload-progress-indicators-for-fetch) – Luca Angioloni Nov 29 '20 at 18:24

0 Answers0