Jeśli dobrze cię rozumiem, chcesz pokazać pasek postępu, dopóki serwer nie będzie gotowy do wysłania pliku, a nie po to, aby pokazać postęp pobierania pliku.
Jeśli to prawda, masz do czynienia z trudnym ćwiczeniem. Niezawodny pasek postępu musi dokładnie wiedzieć, co robisz i ile czasu to zajmie. W twoim przypadku istnieje wiele niewiarygodnych czynników (jednym z nich, być może największym, jest sama sieć).
Dlatego większość programistów używa jakiejś "nieskończonej" animacji do wyświetlania "pracy w toku".
aktualizacja
podstawie Twojego komentarza, najprostszym sposobem, aby wyświetlić "Work in progress" animacja będzie wyglądać
$.ajax({
url: "/myscripts/myserverscript",
type: "POST",
data: {
foo: "bar"
},
dataType: "text",
beforeSend: function(xhr){
// display a progress animation
},
complete: function(xhr, status){
// hide the animation
}
...
});
W przypadku pojedynczego żądania. Możesz także skonfigurować globalną obsługę zdarzeń ajax dla obu (.ajaxStart()
i .ajaxStop()
), aby ustawić funkcjonalność show/hide.
Referencje: .ajax(), .ajaxStart(), bar .ajaxStop()
Chciałbym wiedzieć, jak to zrobić –
Ile czasu zajmuje zwykle wygenerowanie pliku? – cherouvim
@cherouvim: Czas nie jest tutaj statyczny. Różni się między plikami. Zajmuje to minimum 1 sekundę do maksymalnie 20-30 minut. –