Mam pasek postępu jQueryUI, który powinien pokazywać procent wykonanego zapytania. Oracle ma ładną tabelę systemową, która pozwala zobaczyć operacje, które zajmie więcej niż 10 sekund. Próbuję wykonać rozłożone wezwania $ .ajax do tego zapytania, aby odświeżyć pasek postępu.jQuery Pętla AJAX do odświeżenia jQueryUI ProgressBar
Problem polega na tym, że mogę albo uzyskać pętle, aby wykonać szybkie żądania pożaru bez żadnego czasu oczekiwania, albo po prostu opóźnić wykonanie całego skryptu JavaScript.
Uruchamiam pierwsze żądanie, klikając przycisk "Wykonaj" w oknie dialogowym jQueryUI.
$("#dlgQuery").dialog({
buttons: {
Execute: function() {
$(this).dialog("close");
StartLoop();
}
}
});
Próbuję zbudować zarówno funkcję StartLoop()
lub dokonać rekurencyjną GetProgress()
funkcję. Najlepiej byłoby, gdyby publiczna zmienna miała być wskaźnikiem, kiedy przerwać pętlę lub zatrzymać rekurencyjne wywoływanie funkcji.
Dla uproszczenia właśnie popełnił statycznej pętli, która wykonuje 100 razy:
function StartLoop(){
for (var i = 0; i < 100; i++) {
GetProgress();
}
}
A oto moja prośba próbki 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;
}
});
}
Więc co znalazłem to, do tej pory:
setTimeout(GetProgress(), 3000)
w StartLoop()
zawiesza JavaScript, a okno dialogowe nie zamyka się (zakładam, ponieważ będzie czekać, aż zapytanie zostanie wykonane).
This jeden, pausecomp(3000)
robi to samo.
Jeśli zadzwonię do któregokolwiek z nich w funkcji "sukces" mojego żądania AJAX, zostanie ono zignorowane (prawdopodobnie dlatego, że rozpoczyna asynchronicznie inne połączenie).
Trochę utknąłem tutaj, każda pomoc będzie doceniona, dzięki.
ciekawe pytanie. :) Nie mogę wymyślić dobrej odpowiedzi. Czy próbowałeś w ogóle używać setInterval? Co się stało, gdy wypróbowałeś metodę rekursywną? –
Otrzymuję szybkie żądania/odpowiedzi. – tedski