Tengo una barra de progreso jQueryUI que debe mostrar el porcentaje de una consulta realizada. Oracle tiene una buena tabla de sistema que le permite ver operaciones que tomarán más de 10 segundos. Estoy intentando hacer llamadas escalonadas de $ .ajax a esta consulta para actualizar la barra de progreso.jQuery bucle AJAX para actualizar jQueryUI ProgressBar
El problema es que puedo obtener los bucles para hacer solicitudes rápidas sin tiempo de espera o simplemente retrasar la ejecución de todo el JavaScript.
Empiezo la primera solicitud haciendo clic en el botón "Ejecutar" en el cuadro de diálogo jQueryUI.
$("#dlgQuery").dialog({
buttons: {
Execute: function() {
$(this).dialog("close");
StartLoop();
}
}
});
estoy tratando de construir, ya sea la función StartLoop()
o hacer una función recursiva GetProgress()
. Idealmente, tendré una variable pública var isDone = false
para que actúe como mi indicador de cuándo finalizar el ciclo o detener de forma recursiva la función.
Por simplicidad acabo de hacer un bucle estática que ejecuta 100 veces:
function StartLoop(){
for (var i = 0; i < 100; i++) {
GetProgress();
}
}
Y aquí está mi muestra de 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;
}
});
}
Así que lo que he encontrado es, hasta el momento:
setTimeout(GetProgress(), 3000)
en StartLoop()
se bloquea el Javascript, y el cuadro de diálogo no se cierra (supongo, porque esperará hasta que la consulta se complete).
This uno, pausecomp(3000)
hace casi lo mismo.
Si llamo a cualquiera de estos en la función "éxito" de mi solicitud AJAX, se ignora (probablemente porque está comenzando otra llamada asincrónicamente).
Estoy un poco atrapado aquí, cualquier ayuda sería apreciada, gracias.
pregunta interesante. :) No puedo pensar en una buena respuesta. ¿Has probado usar setInterval? ¿Qué pasó cuando probaste el método recursivo? –
Recibo solicitudes/respuestas de disparo rápido. – tedski