Ajax - progress event

0

Witam,

W jaki sposób przechwycić zdarzenie dla wykonującej się operacji po stronie serwera podczas przesłania żądania za pomocą ajax?

xhr: function () {
                    var xhr = new window.XMLHttpRequest();
                    //Download progress, waiting for response from server
                    xhr.addEventListener("progress", function (e) {
                        console.log("in Download progress");
                        if (e.lengthComputable) {
                            //percentComplete = (e.loaded / e.total) * 100;
                            let percentComplete = parseInt((e.loaded / e.total * 100), 10);
                            console.log(percentComplete);
                        } else {
                            console.log("Length not computable.");
                        }
                    }, false);
                    return xhr;
                },

Za pomocą eventu progress nie działa.
Wyświetla 100% progresu w momencie otrzymania odpowiedzi z serwera.
Dlaczego ten event wywołuje się tylko raz?

0

Wygląda na to, że od wersji 1.9.3+ wyłapanie tego zdarzenia jest niemożliwe.

https://stackoverflow.com/questions/61165390/progress-bar-with-ajax-and-jquery

1

Szybki rzut oka na dokumentację wskazuje, że xhr dalej istnieje. Aczkolwiek chyba lepiej by było użyć beforeSend. Może to zadziała.

Dobra, inaczej. Jesteś pewna, że zapytanie trwa na tyle długo, żeby to zdarzenie leciało więcej niż raz?

0
tsz napisał(a):

Szybki rzut oka na dokumentację wskazuje, że xhr dalej istnieje. Aczkolwiek chyba lepiej by było użyć beforeSend. Może to zadziała.

Dobra, inaczej. Jesteś pewna, że zapytanie trwa na tyle długo, żeby to zdarzenie leciało więcej niż raz?

Tak, jestem pewny/pewna, ponieważ dałem/dałam sleepa po stronie serwera.
BeforeSend działa ale nie pokazuje aktualnego progresu/czasu wykonywania.

1
Wiara czyni cuda napisał(a):
tsz napisał(a):

Szybki rzut oka na dokumentację wskazuje, że xhr dalej istnieje. Aczkolwiek chyba lepiej by było użyć beforeSend. Może to zadziała.

Dobra, inaczej. Jesteś pewna, że zapytanie trwa na tyle długo, żeby to zdarzenie leciało więcej niż raz?

Tak, jestem pewny/pewna, ponieważ dałem/dałam sleepa po stronie serwera.
BeforeSend działa ale nie pokazuje aktualnego progresu/czasu wykonywania.

Ale jednego sleepa? Może to przez to, bo żeby poszedł event progess to musi zostać wysłany jakiś chunk danych. Jak sobie kiedyś takie coś symulowałem to zrobiłem pętlę ze sleepami i w każdej iteracji wysyłałem jakiś kawałek danych. Pewnie też zależy w czym masz zakodowany serwer.

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