Ho una barra di progresso jQueryUI che dovrebbe mostrare la percentuale di una query eseguita. Oracle ha una bella tabella di sistema che ti permette di vedere operazioni che dureranno più di 10 secondi. Sto cercando di effettuare chiamate $ .ajax scaglionate a questa query per aggiornare la barra di avanzamento.jQuery loop AJAX per aggiornare jQueryUI ProgressBar
Il problema è, posso ottenere sia i passanti a fare richieste di fuoco rapido, senza alcun tempo di attesa, o semplicemente ritardare l'intero JavaScript da eseguire.
comincio la prima richiesta cliccando il mio tasto "Esegui" in una finestra di jQueryUI.
$("#dlgQuery").dialog({
buttons: {
Execute: function() {
$(this).dialog("close");
StartLoop();
}
}
});
che sto cercando di costruire sia la funzione StartLoop()
o fare una funzione ricorsiva GetProgress()
. Idealmente, avrò una variabile pubblica var isDone = false
che fungerà da indicatore per quando terminare il ciclo o interrompere la chiamata in modo ricorsivo alla funzione.
Per semplicità ho appena fatto un ciclo statico che esegue 100 volte:
function StartLoop(){
for (var i = 0; i < 100; i++) {
GetProgress();
}
}
Ed ecco la mia richiesta di esempio Ajax:
function GetProgress() {
$.ajax({
url: "query.aspx/GetProgress",
success: function (msg) {
var data = $.parseJSON(msg.d);
$("#pbrQuery").progressbar("value", data.value);
//recursive?
//GetProgress();
//if (data.value == 100) isDone = true;
}
});
}
Quindi quello che ho trovato è, finora:
setTimeout(GetProgress(), 3000)
in StartLoop()
blocca Javascript e la finestra di dialogo non si chiude (presumo, perché attenderà fino a quando la query non viene completata).
This uno, pausecomp(3000)
fa più o meno la stessa cosa.
Se io chiamo uno di questi nella funzione "successo" della mia richiesta AJAX, esso viene ignorato (probabilmente perché si sta cominciando un'altra chiamata in modo asincrono).
Sono un po 'bloccato qui, tutto l'aiuto sarebbe apprezzato, grazie.
domanda interessante. :) Non riesco a pensare ad una buona risposta. Hai provato a utilizzare setInterval? Cosa è successo quando hai provato il metodo ricorsivo? –
Ricevo richieste/risposte a fuoco rapido. – tedski