lengthComputable zawsze na false przy pobieraniu przez ajaxa

0

witam

Napisałem poniższy kod, który ma zmieniać wartości progress bara w zależności od wysłania/pobrania:

var download = document.querySelector("#download"),
    upload = document.querySelector("#upload"),
    xhr = new XMLHttpRequest(),
    formDat = new FormData();

xhr.onreadystatechange = function (e) {
    if (this.readyState === 4) {
        if (this.status === 200) {
            console.log("Odebrano z serwera " + this.response);
        } else {
            console.log("Nie odebrano poprawnie danych z serwera");
        }
    }
};

xhr.upload.onprogress = function (e) {
    if (e.lengthComputable) {
        var percent = (e.loaded / e.total) * 100;
        upload.value = percent;
    } else {
        console.log("Upload nie działa");
    }
}

xhr.onprogress = function(e) {

    if (e.lengthComputable) {
        var percent = e.loaded / e.total * 100;
        download.value = percent;
    } else {
        console.log(e.lengthComputable);
    }

};

xhr.open("POST", "Home/Show", true);
 
formDat.append("nazwisko", "Rynkowski");
formDat.append("imie", "Ryszard");

xhr.send(formDat);

I niestety mam problem przy wykonywaniu zdarzenia pobierania informacji z serwera, gdyż argument eventu onprogress zawsze daje mi wartość lengthComputable = false, przez co nie może być 'wyliczany'.

Ogólnie żądanie wysyłane jest do akcji kontrolera, która zwraca prosty Content (dokładnie zwykłego stringa).

Czy moglibyście mi pomóc, gdyż nie wiem za bardzo co robię źle ?

0

Czekaj co jest źle??

Co nie działą dokładnie?

Wyświetlanie zawsze musisz znać zakres minimalny i maksymalny z tego możesz wyznaczyć zakres, a z tego procenty, bez tego ani rusz w takim czymś.

Napisz co cię rozsierdza i czego nie rozumiesz, bo tak nic nie wiadomo.

0
Czarny Pomidor napisał(a):

Czekaj co jest źle??

Co nie działą dokładnie?

Wyświetlanie zawsze musisz znać zakres minimalny i maksymalny z tego możesz wyznaczyć zakres, a z tego procenty, bez tego ani rusz w takim czymś.

Napisz co cię rozsierdza i czego nie rozumiesz, bo tak nic nie wiadomo.

no więc kod html tych barów wygląda tak

Pobieranie
<progress id="download" max="100" value="0"></progress>

Wysyłanie
<progress id="upload" max="100" value="0"></progress>

Wartość maksymalną ustawiłem na 100 a początkowa na 0.

zdarzenie dla postępu wysyłania :

xhr.upload.onprogress = function (e) {
    if (e.lengthComputable) {
        var percent = (e.loaded / e.total) * 100;
        upload.value = percent;
    } else {
        console.log("Upload nie działa");
    }
}

event dla postępu wysyłania działa jak powinien (czyli z postępem wysyłania progress bar się stopniowo zapełnia), natomiast przy zdarzeniu pobierania z serwera (kod zamieszczam poniżej)

xhr.onprogress = function(e) {
 
    if (e.lengthComputable) {
        var percent = e.loaded / e.total * 100;
        download.value = percent;
    } else {
        console.log(e.lengthComputable);
    }
};

nie mogę odczytać wartości aktualnego postępu (zmienna percent), gdyż właściwość argumentu zdarzenia ( e ) lengthComputable jest równa false. Oznacza to z tego co przeczytałem, że nie można obliczyć wartości dla postępu (zmiennej percent), gdyż wartość total jest równa 0.

0

Przepraszam przez przypadek dodałem odpowiedź :P.

Więc tak w załączniku powyżej znajduje się screen jak to wygląda w chrome dev tools.

I moje pytanie jest takie jak zrobić, żebym zmienić wartość tego lengthComputable w zdarzeniu pobierania na true, gdyż to rozwiązałoby problem ?

0

Na prawdę nikt nie wie ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1