è possibile avere una barra di avanzamento che misura l'avanzamento di jQuery.get()?Come avere una barra di avanzamento in jQuery.get()
risposta
Questo non viene fornito immediatamente nella versione corrente di jQuery, ma è comunque possibile con un piccolo sforzo.
È necessario ascoltare l'evento progress
dello XMLHttpRequest
a cui jQuery consente l'accesso. Un esempio from Dave Bond's blog:
$.ajax(
{
type: 'POST', // 'POST' here so that _upload_ progress _also_ makes sense;
// Change to 'GET' if you need.
url: "/", data: {},
beforeSend: function(XMLHttpRequest)
{
//Upload progress
XMLHttpRequest.upload.addEventListener("progress", function(evt){
if (evt.lengthComputable) {
var percentComplete = evt.loaded/evt.total;
//Do something with upload progress
}
}, false);
//Download progress
XMLHttpRequest.addEventListener("progress", function(evt){
if (evt.lengthComputable) {
var percentComplete = evt.loaded/evt.total;
//Do something with download progress
}
}, false);
},
success: function(data){
// successful completion handler
}
});
Qui il link al docs on XMLHttpRequest
's progress
event.
Si potrebbe anche voler dare un'occhiata al jquery.ajax-progress plugin per evitare di farlo da soli.
Note:
Alcuni browser più vecchi potrebbero non supportare l'evento
progress
.Per calcolare l'avanzamento del download, è necessario conoscere la dimensione della risorsa da scaricare, ovvero il server deve inviare l'intestazione HTTP
Content-length
. Se la dimensione non è nota, non è possibile calcolare il progresso. Questo è ciò che è la proprietà dell'eventoprogress
.
Se è possibile suddividere l'attività che il server sta gestendo in blocchi di elaborazione, è possibile effettuare una risposta server chiamando un altro $.get()
e aggiornare una barra di avanzamento in questo modo.
function get_chunk(chunk_number, max_chunks){
$.get('eg.php?chunk=' + chunk_number, function(){
chunk_number++;
if(chunk_number < max_chunks){
get_chunk(chunk_number, max_chunks)
}
update_status_bar(chunk_number, max_chunks);
}
}
In caso contrario, si dovrà guardare in un modello di applicazione web come Comet che utilizza lato server spingendo in cui il cliente non deve fare una richiesta in modo che i dati da inviare al client
questo dipende dalla tecnologia server è stato utilizzato tho .. – user1600124
In che modo? se riesci a dividere il processo che sta facendo il tuo server in funzioni che possono essere chiamate una dopo l'altra, questo può essere fatto sulla maggior parte se non su tutte le tecnologie. Non funzionerebbe per cose come il recupero di un'immagine necessariamente senza un po 'di lavoro, ma se hai bisogno di tornare a dire un elenco di risultati da un database puoi limitare i risultati dal database e tirare indietro 100 alla volta piuttosto che l'intero risultato set of say 100000 – DGS
Bene .. Come avete intenzione di determinare quale file viene scaricato da quale utente? Sessione? Php utilizza il blocco di sessione in modo che il file di sessione possa essere utilizzato da una sola richiesta in qualsiasi momento. – user1600124
no per quanto ne so non è possibile –